NEWAI content checker: see which pages read like AI text

APIWebsite alerts

Website alerts API. Every site event from the last 90 days in one feed.

Pull outages, SSL and https problems, SEO changes on pages and Core Web Vitals drops, plus a summary of what is open right now. You build your status board, client report or ticket script while we keep the scans and checks running. Every plan includes the REST endpoints and MCP tools at no extra cost.

Site uptime

Homepage outages after two failed 30-minute checks, including when the site came back up, and firewall blocks.

SSL and https

Certificates that are invalid or expire today or tomorrow, and missing http-to-https redirects.

SEO page changes

New and fixed scan findings per page, plus changed titles, H1s, meta descriptions or status codes.

Core Web Vitals

Real-user LCP, INP or CLS dropping from good to needs improvement, or to poor, on mobile or desktop.

Website alerts endpoints and MCP tools

Call the REST endpoints over HTTPS with POST and a JSON body, or GET with the same arguments in the query string. Send your personal API key from the MCP page in the app as an Authorization: Bearer header. The full REST schema is in the OpenAPI specification. In Claude Code or Cursor, the MCP server exposes the same data as two tools.

You get 60 calls per minute per key across the REST API and the MCP server together. Both endpoints only read data, so a key can never change a site or edit notification settings.

REST endpoint MCP tool What it returns
alerts.feed get_alerts_feed Every event on one site from the last 90 days, newest first. Filter by kind (uptime, sitecheck, seo, cwv), problems_only, search query q and lang (en or nl), and page through with cursor.
alerts.summary get_alerts_summary Event counts per kind over the last 90 days, plus up to five active issues in open, newest first, with since.

A real alerts.feed call and response

Pass site_id to alerts.feed, and add filters when you only want one slice. This call asks for the last two SEO changes on a site.

curl -s https://app.marketingtracer.com/rest/v1/alerts.feed \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "site_id": "65a1b2c3d4e5f60718293a4b",
    "kind": "seo",
    "limit": 2
  }'
{
  "data": [
    {
      "id": "6ae67516bf737c062606238a",
      "at": "2026-10-31T23:00:00Z",
      "kind": "seo",
      "type": "seo",
      "rule": "status_change",
      "label": "changed",
      "text": "Now returns 200 (was 403)",
      "url": "https://www.example-site.nl/pregnancy/work/risk-assessment",
      "open": false
    },
    {
      "id": "6ae5fa7c532767cc8602b59b",
      "at": "2026-10-30T23:00:00Z",
      "kind": "seo",
      "type": "seo",
      "rule": "status_change",
      "label": "problem",
      "text": "Now returns 410 (was 403)",
      "url": "https://www.example-site.nl/pregnancy/fun/spa-treatment",
      "open": false
    }
  ],
  "meta": {
    "site_id": "65a1b2c3d4e5f60718293a4b",
    "next_cursor": "eyJwYyI6WzE3OTM0MDEyMDAwMDAs…",
    "total": 2
  }
}

Each row carries a ready-made sentence in text, in English by default or in Dutch with lang: "nl". You also get label (down, problem, worse, fixed or changed) to colour or filter rows right away. SEO events carry the page address in url and the scan key in rule, while site-wide events return null for both. Active outages, blocked checks and SSL or https problems keep open: true until they clear, and SEO rows always have open: false.

The feed reads the site's 90-day history directly, independent of who turned email or Slack alerts on or off in the app. Pass meta.next_cursor back as cursor to load the next page.

Catch open site problems before a client calls

Run a morning script across your client sites with alerts.summary to feed an office screen or your ticket queue. Sites with an empty open list need no work. Any site that is down, refusing our uptime check, running on an SSL certificate that expires tomorrow or missing its https redirect shows up right away with since.

When you want the individual failures to create tickets, call alerts.feed with problems_only: true. Normal title edits and fixed scan rules stay out of the list, so you only get down, problem and worse rows.

A 90-day site changelog in your client report

Clients push a template update on Friday afternoon and ask on Monday morning what changed on the site. Pull alerts.feed with kind: "seo" into your client portal or monthly report. It flags pages that turned non-indexable or started returning 404, alongside new and fixed scan issues. Any changed or removed title, H1 or meta description appears in the same list.

All 90 days of events stay in the log even if everyone on the site turned email and Slack notifications off. Pass lang: "nl" when your client reads Dutch.

Line up site changes with traffic drops in your AI

When organic clicks drop on a product folder, ask Claude Code or Cursor what happened there. With the MarketingTracer MCP connected, your assistant checks get_alerts_summary and get_alerts_feed (filtered by URL path with q) next to Search Console and scan data.

You see at once whether the dip lines up with a batch of 410 pages, a removed H1, a firewall blocking our bot or a mobile LCP drop.

Organic clicks on /shoes/ dropped this week. Check what changed on those pages and whether anything is still open on the site.

get_alerts_summary get_alerts_feed · q: "/shoes/"
diagnose_traffic_dropget_search_consoleget_scan

Endpoints, arguments and field descriptions

Every endpoint is a POST with a JSON body; reading endpoints also take a GET with the same arguments in the query string. Send your API key as Authorization: Bearer YOUR_API_KEY. Every answer is {"data": …, "meta": {…}}: meta.site_id always, meta.next_cursor and meta.total for a list, meta.period where the endpoint covers a period. An error is {"error": {"code", "message"}} with the HTTP status: 400 invalid_argument, unknown_argument or missing_argument; 401 not_authenticated; 403 no_access or tool_off; 404 not_found; 429 rate_limited. The machine-readable version is openapi.json.

alerts.feed

POST /rest/v1/alerts.feed · MCP tool get_alerts_feed

Returns everything that happened on one site in the last 90 days, newest first, one row per event: outages, SSL and https problems, Core Web Vitals that got worse, and every change the SEO scan found on a page (a new problem, a fixed one, a changed title, H1, meta description or status). The same rows as the Meldingen page, independent of who gets which alert by mail or Slack. Page through with cursor.

Arguments

ArgumentTypeWhat it does
site_id (required)stringThe site: its id from list_sites, or the id in the app’s address.
kindone of uptime, sitecheck, seo, cwvOnly this kind: uptime, sitecheck, seo or cwv. Omit for all.
problems_onlyboolean, default Only rows labelled problem, down or worse.
qstringOnly rows whose page address (seo) or text (the other kinds) contains this.
langone of en, nlLanguage of text: en or nl. Defaults to en.
limitinteger, 1 to 100, default 50Rows per page, 1-100. Defaults to 50.
cursorstringmeta.next_cursor of the previous call, for the next page.

Example request

curl -X POST https://app.marketingtracer.com/rest/v1/alerts.feed \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"site_id":"YOUR_SITE_ID","kind":"seo","limit":2}'

Example response · Two SEO rows; pages that came back after the firewall fix.

{
  "data": [
    {
      "id": "6ae67516bf737c062606238a",
      "at": "2026-10-31T23:00:00Z",
      "kind": "seo",
      "type": "seo",
      "rule": "status_change",
      "label": "changed",
      "text": "Now returns 200 (was 403)",
      "url": "https://www.example-site.nl/pregnancy/work/risk-assessment",
      "open": false
    },
    {
      "id": "6ae5fa7c532767cc8602b59b",
      "at": "2026-10-30T23:00:00Z",
      "kind": "seo",
      "type": "seo",
      "rule": "status_change",
      "label": "problem",
      "text": "Now returns 410 (was 403)",
      "url": "https://www.example-site.nl/pregnancy/fun/spa-treatment",
      "open": false
    }
  ],
  "meta": {
    "site_id": "YOUR_SITE_ID",
    "next_cursor": "eyJwYyI6WzE3OTM0MDEyMDAwMDAsIjZhZTVmYTdjNTMyNzY3Y2M4NjAyYjU5YiJdfQ==",
    "total": 2
  }
}

Response fields · data is a list; each item has:

FieldTypeWhat it is
idstringThe id of the event.
atstringWhen it happened, ISO 8601 UTC. For seo: when the scan saw it.
kindstringuptime (site down or our check blocked), sitecheck (SSL certificate invalid or expiring, http not redirecting to https), seo (a change or problem the SEO scan found on a page) or cwv (a Core Web Vital of the site got a worse rating than the week before).
typestringWhat happened: uptime_down, uptime_blocked, ssl_invalid, ssl_expiry, https_redirect, cwv_worse, or seo for a change from the SEO scan.
rulestring or nullFor seo: the scan rule or change (for example indexable, title_change, status_change); null for the other kinds.
labelstringdown (outage), problem, worse, fixed or changed.
textstringThe event in one sentence, in lang.
urlstring or nullFor seo: the page; null for the other kinds (they are about the whole site).
openbooleanWhether it is still going on (an outage that has not ended, a certificate that is still invalid). Always false for seo.

alerts.summary

POST /rest/v1/alerts.summary · MCP tool get_alerts_summary

Returns how many events the site had per kind in the last 90 days (the rows of alerts.feed) and what is still going on now: an outage, a blocked check, an SSL or https problem, at most 5, newest first.

Arguments

ArgumentTypeWhat it does
site_id (required)stringThe site: its id from list_sites, or the id in the app’s address.
langone of en, nlLanguage of text: en or nl. Defaults to en.

Example request

curl -X POST https://app.marketingtracer.com/rest/v1/alerts.summary \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"site_id":"YOUR_SITE_ID"}'

Example response · Nothing open; 426 SEO changes in 90 days.

{
  "data": {
    "days": 90,
    "total": 426,
    "by_kind": {"uptime": 0, "sitecheck": 0, "seo": 426, "cwv": 0},
    "open": []
  },
  "meta": {"site_id": "YOUR_SITE_ID"}
}

Response fields · in data:

FieldTypeWhat it is
daysintegerThe period counted, in days (90).
totalintegerEvents of all kinds together.
by_kindobjectEvents per kind.
by_kind.uptimeintegerOutages and blocked checks.
by_kind.sitecheckintegerSSL and https problems.
by_kind.seointegerChanges the SEO scan found.
by_kind.cwvintegerCore Web Vitals that got worse.
openarrayWhat is still going on, newest first; empty when nothing is.
open[].kindstringuptime or sitecheck (a Core Web Vitals change is an event, never open).
open[].typestringuptime_down, uptime_blocked, ssl_invalid, ssl_expiry or https_redirect.
open[].textstringIn one sentence, in lang.
open[].sincestringWhen it started, ISO 8601 UTC.
White label / agency

White-label website alerts API. On your own domain, across every client site.

With a white-label dashboard on your own domain, both the REST API and the MCP server answer there under your agency name. One API key reads the alerts for every client site. You decide whether your clients also get the API and the MCP.

API hubSEO API overview APIUptime monitoring API APICore Web Vitals API MCPSEO MCP server

Free 14-day trial

MarketingTracer smart A.I. tool shows you what you need to rank. Then we'll help you get it done.

  • No credit card required
  • No installation needed
  • No strings attached
Start your 14-day trial

Website alerts API FAQ

Something else? Ask us.

What does the website alerts API return?

It returns a site's 90-day event history and any problem still open right now. Use alerts.feed for one row per event, newest first, with its timestamp, kind, label, sentence in English or Dutch, page URL for SEO changes and open flag. For a quick status check, alerts.summary gives you 90-day counts per kind and up to five active issues.

Which kinds of events are in the alerts feed?

Four kinds: uptime, sitecheck, seo and cwv. Under uptime you get homepage outages after two failed 30-minute checks (including recovery time) and firewall blocks. Site-wide SSL problems (invalid or expiring today or tomorrow) and missing http-to-https redirects sit under sitecheck. Page-level seo events cover new and fixed scan findings (including indexability) plus changed or removed titles, H1s, meta descriptions or HTTP status codes. The cwv kind logs real-user LCP, INP or CLS when a metric drops from good to needs improvement, or from needs improvement to poor, on mobile or desktop.

Do email or Slack notification settings affect what alerts.feed returns?

No. Both alerts.feed and alerts.summary read the site's 90-day event log directly. Even if everyone on a site turns email and Slack notifications off, every event from the last 90 days still appears in the API and the MCP.

How does /api/alerts differ from /api/uptime?

This API gives you one 90-day event stream across outages, SSL and https problems, SEO page changes and Core Web Vitals drops. The uptime monitoring API goes deep on homepage availability itself. It returns 7-day and 30-day uptime percentages, median response time (TTFB) and full outage durations.

What is the rate limit and does the API cost extra?

You get 60 calls per minute per API key across the REST API and the MCP server together, included in every plan at no extra cost. Plan details are on the pricing page.

Can I read website alerts in Claude or Cursor, and can the tools change settings?

Yes, you can read them in both, and nothing on a site or in your alert settings can be changed. Connect Claude Code or Cursor to the MarketingTracer MCP server with your API key to call get_alerts_feed and get_alerts_summary. It also works in the Claude app where custom connectors show request headers, while ChatGPT does not connect because it needs a sign-in flow.