NEWAI content checker: see which pages read like AI text

APIAI Insights

AI visibility API. Whether ChatGPT and Gemini name you, in your own dashboard.

AI Insights asks your prompts to ChatGPT and Gemini and records who they name and link to. It also counts the visits that come to your site from AI assistants. The AI visibility API hands you all of it: per prompt, per AI, per page and per month.

Mentioned or linked

For every prompt, per AI.

Who else

The sites the AIs name instead of you.

Visits from AI

Sessions, conversions and revenue from GA4.

Google AI Overview

Whether Google cites you for your tracked keywords.

Eight AI visibility endpoints, eight MCP tools

Each endpoint is a POST to /rest/v1/<endpoint> on app.marketingtracer.com. In your AI assistant the same data is the MCP tool under each endpoint. An AI is always called by the name you know from your visits: chatgpt, gemini, perplexity, copilot and so on.

Endpoint and MCP toolWhat you get
aiinsights.summary
get_aiinsights_summary
How often the AIs mention you and link to you, against the previous period, per AI, plus your prompts and what is connected.
aiinsights.prompts
get_aiinsights_prompts
Every prompt with per AI the latest status (linked, mentioned, none, nosearch when the AI did not search the web, null before the first answer), your place as a source, who else is named, and twelve weeks of history.
aiinsights.prompt
get_aiinsights_prompt
One prompt: the full answer of each AI, the sources it cited with yours marked, and the visits on your cited pages.
aiinsights.competitors
get_aiinsights_competitors
Which sites the AIs name for your prompts, against 28 days earlier, and the pages of others they cite most.
aiinsights.traffic_summary
get_aiinsights_traffic_summary
Visits from AI assistants, engaged visits, conversions and revenue, against the previous period, per AI, and the share of all your visits.
aiinsights.traffic_pages
get_aiinsights_traffic_pages
The same per landing page, with the number of prompts for which an AI cites that page.
aiinsights.traffic_monthly
get_aiinsights_traffic_monthly
Visits from AI per month over 16 months, per AI.
aiinsights.ai_overviews
get_aiinsights_ai_overviews
Per Rank tracker keyword: whether Google shows an AI Overview, whether it cites you and in which place, and who it names instead.

Every endpoint takes site_id. summary, traffic_summary and traffic_pages cover the last 28 days up to yesterday; pass from and to (YYYY-MM-DD) for another period. traffic_monthly takes to, prompt takes the prompt_id from prompts. The three traffic endpoints need GA4; ai_overviews needs keywords in the Rank tracker.

How often you are named, as the API returns it

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

A real site with six prompts, its id changed and shortened where you see …:

{
  "data": {
    "prompts": 6,
    "answers": 9,
    "mentioned": 8,
    "linked": 0,
    "mentioned_pct": {"value": 88.89, "previous": 66.67, "change": 22.22, "change_pct": 33.3},
    "linked_pct": {"value": 0, "previous": 16.67, "change": -16.67, "change_pct": -100},
    "per_engine": [
      {"key": "chatgpt", "label": "ChatGPT", "answers": 6, "mentioned": 5, "linked": 0},
      {"key": "gemini", "label": "Gemini", "answers": 3, "mentioned": 3, "linked": 0}
    ],
    …
  },
  "meta": {
    "site_id": "YOUR_SITE_ID",
    "period": {"from": "2026-10-02", "to": "2026-10-29", "compare_from": "2026-09-04", "compare_to": "2026-10-01"}
  }
}

This site is named more often than a month ago, but no AI links to it any more. An answer counts once per prompt and per AI: the latest one. change is in percentage points, change_pct in percent.

And the visits from AI to a parenting site, from aiinsights.traffic_summary:

"sessions": {"value": 59, "previous": 26, "change": 33, "change_pct": 126.9},
"engaged_sessions": {"value": 46, "previous": 17, "change": 29, "change_pct": 170.6},
"all_sessions": 26226,
"ai_share_pct": 0.22,
"per_engine": [{"key": "chatgpt", "label": "ChatGPT", "sessions": 59, "engaged_sessions": 46, "conversions": 0, "revenue_eur": 0}]

An AI line in your monthly report

People have started to ask whether ChatGPT knows them. Put the mention rate from aiinsights.summary and the visits from aiinsights.traffic_summary next to the Google numbers in your own report, with the change since last month. The question is answered before anyone asks it.

The prompts where a competitor wins

Take aiinsights.prompts and keep the ones where you are not mentioned and a competitor is. That list is your content plan for AI search: per prompt you see who is named and, through aiinsights.prompt, which pages the AI cited in its answer.

Every endpoint, argument and field

Generated from the same definitions the API itself runs on, and the example answers are tested against them, so this reference is never behind. 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.

aiinsights.summary

POST /rest/v1/aiinsights.summary · MCP tool get_aiinsights_summary

Returns the AI visibility of one site: of the current answers (per prompt and AI the latest answer, if it is at most 62 days old), how many mention the site (name it or link to it) and how many link to it (cite one of its pages as a source), as a share now against the last day of the previous period, also per AI (ChatGPT, Gemini); plus the prompts, the measuring package and what is connected. One measurement is one prompt asked to one AI; one round asks every prompt once, at the package's frequency.

Arguments

ArgumentTypeWhat it does
site_id (required)stringThe site: its id from list_sites, or the id in the app’s address.
fromstring, YYYY-MM-DDFirst day of the period, YYYY-MM-DD; give it together with to. Without from and to, the period is the last 28 days up to yesterday, against the 28 days before.
tostring, YYYY-MM-DDLast day of the period, YYYY-MM-DD (at most yesterday); give it together with from. The previous period is then the same days one month earlier.

Example request

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

Example response · A real answer, anonymised and shortened to two items per list.

{
  "data": {
    "prompts": 6,
    "prompts_measured": 6,
    "last_measured_date": "2026-10-27",
    "engines": [{"key": "chatgpt", "label": "ChatGPT"}, {"key": "gemini", "label": "Gemini"}],
    "answers": 9,
    "mentioned": 8,
    "linked": 0,
    "mentioned_pct": {"value": 88.89, "previous": 66.67, "change": 22.22, "change_pct": 33.3},
    "linked_pct": {"value": 0, "previous": 16.67, "change": -16.67, "change_pct": -100},
    "per_engine": [
      {"key": "chatgpt", "label": "ChatGPT", "answers": 6, "mentioned": 5, "linked": 0},
      {"key": "gemini", "label": "Gemini", "answers": 3, "mentioned": 3, "linked": 0}
    ],
    "brand_terms": ["Example"],
    "competitors": [],
    "ga4_connected": true,
    "search_console_connected": true,
    "rank_tracker_keywords": 10,
    "package": {"frequency": "monthly", "measurements": 30},
    "included": {"frequency": "monthly", "measurements": 30},
    "measurements_used": 12,
    "can_write": true,
    "can_set_plan": true,
    "can_buy": false
  },
  "meta": {
    "site_id": "YOUR_SITE_ID",
    "period": {
      "from": "2026-10-02",
      "to": "2026-10-29",
      "compare_from": "2026-09-04",
      "compare_to": "2026-10-01"
    }
  }
}

Response fields · in data:

FieldTypeWhat it is
promptsintegerPrompts of the site.
prompts_measuredintegerPrompts with at least one current answer.
last_measured_datestring or nullThe day of the site's newest answer, YYYY-MM-DD; null before the first answer.
enginesarrayThe AIs the prompts are asked to.
engines[].keystringchatgpt or gemini.
engines[].labelstringThe name to show.
answersintegerCurrent answers: per prompt and AI the latest answer, if it is at most 62 days old.
mentionedintegerCurrent answers that mention the site (name it or link to it).
linkedintegerCurrent answers that link to the site (cite one of its pages as a source).
mentioned_pctobjectThe share of current answers that mention the site, 0-100, on the last day of the period, against the last day of the previous period.
mentioned_pct.valuenumber or nullNow (or on to); null without answers.
mentioned_pct.previousnumber or nullThe previous period; null when there was nothing to compare with.
mentioned_pct.changenumber or nullvalue minus previous (for a _pct field: percentage points).
mentioned_pct.change_pctnumber or nullThe change in percent of previous; null when previous is 0 or null.
linked_pctobjectThe share of current answers that link to the site, 0-100, on the last day of the period, against the last day of the previous period.
linked_pct.valuenumber or nullNow (or on to); null without answers.
linked_pct.previousnumber or nullThe previous period; null when there was nothing to compare with.
linked_pct.changenumber or nullvalue minus previous (for a _pct field: percentage points).
linked_pct.change_pctnumber or nullThe change in percent of previous; null when previous is 0 or null.
per_enginearrayThe same counts per AI.
per_engine[].keystringchatgpt or gemini.
per_engine[].labelstringThe name to show.
per_engine[].answersintegerCurrent answers of this AI.
per_engine[].mentionedintegerAnswers that mention the site.
per_engine[].linkedintegerAnswers that link to the site.
brand_termsarray<string>The names we look for in the answers.
competitorsarray<string>The followed competitors (the list shared with the Rank tracker).
ga4_connectedbooleanWhether GA4 is connected; the traffic endpoints need it.
search_console_connectedbooleanWhether Search Console is connected.
rank_tracker_keywordsintegerTracked keywords in the Rank tracker; aiinsights.ai_overviews needs them.
packageobjectThe measuring package of the site.
package.frequencystringmonthly, biweekly or weekly: how often a round runs.
package.measurementsintegerMeasurements per round.
includedobjectThe package that comes with every site.
included.frequencystringmonthly, biweekly or weekly: how often a round runs.
included.measurementsintegerMeasurements per round.
measurements_usedintegerMeasurements the prompts take per round; above the package, the newest prompts are paused.
can_writebooleanWhether the caller may add and change prompts.
can_set_planbooleanWhether the caller may set a package for the site (white label admins).
can_buybooleanWhether the caller may buy a bigger package.

aiinsights.prompts

POST /rest/v1/aiinsights.prompts · MCP tool get_aiinsights_prompts

Returns the prompts of one site, oldest first, with per AI the status of the current answer (linked: the site is a source; mentioned: named, not linked; none: not named; nosearch: the AI did not search the web and did not name the site; null: no answer from the last 62 days), the site's place among the sources, the other sites that appear in the answers, and the best status per week over the last 12 weeks.

Arguments

ArgumentTypeWhat it does
site_id (required)stringThe site: its id from list_sites, or the id in the app’s address.

Example request

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

Example response · A real answer, anonymised and shortened to two items per list (weeks: the first two of the twelve).

{
  "data": [
    {
      "id": "6a38ed0ec1b8515f372efd22",
      "prompt": "welke webshop verkoopt de beste dakdragers?",
      "engines": ["chatgpt", "gemini"],
      "brand_terms": ["Example Shop"],
      "paused": false,
      "errors": [],
      "created_at": "2026-06-22T08:06:38Z",
      "per_engine": [
        {
          "key": "chatgpt",
          "label": "ChatGPT",
          "asked": true,
          "status": "none",
          "position": null,
          "date": "2026-10-26"
        },
        {
          "key": "gemini",
          "label": "Gemini",
          "asked": true,
          "status": null,
          "position": null,
          "date": null
        }
      ],
      "also_mentioned": ["google.com"],
      "weeks": [{"date": "2026-08-10", "status": "none"}, {"date": "2026-08-17", "status": "none"}]
    },
    {
      "id": "6a38ed0ec1b851609b415f32",
      "prompt": "ik zoek een hondenrek voor mijn audi a3",
      "engines": ["chatgpt", "gemini"],
      "brand_terms": ["Example Shop"],
      "paused": false,
      "errors": [],
      "created_at": "2026-06-22T08:06:38Z",
      "per_engine": [
        {
          "key": "chatgpt",
          "label": "ChatGPT",
          "asked": true,
          "status": "none",
          "position": null,
          "date": "2026-10-26"
        },
        {
          "key": "gemini",
          "label": "Gemini",
          "asked": true,
          "status": null,
          "position": null,
          "date": null
        }
      ],
      "also_mentioned": ["dogguards.co.uk", "bol.com"],
      "weeks": [
        {"date": "2026-08-10", "status": "none"},
        {"date": "2026-08-17", "status": "linked"}
      ]
    }
  ],
  "meta": {"site_id": "YOUR_SITE_ID", "next_cursor": null, "total": 30}
}

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

FieldTypeWhat it is
idstringThe prompt id; prompt_id in aiinsights.prompt.
promptstringThe question as asked.
enginesarray<string>The AIs this prompt is asked to.
brand_termsarray<string>Extra names looked for in the answers to this prompt.
pausedbooleanWhether the prompt is above the package and not asked.
errorsarray<string>Keys of the AIs (chatgpt, gemini) whose latest attempt failed.
created_atstring or nullWhen the prompt was added, ISO 8601 UTC.
per_enginearrayThe latest answer per AI.
per_engine[].keystringchatgpt or gemini.
per_engine[].labelstringThe name to show.
per_engine[].askedbooleanWhether this prompt is asked to this AI.
per_engine[].statusstring or nulllinked, mentioned, none or nosearch for the current answer; null when there is no answer from the last 62 days.
per_engine[].positioninteger or nullThe site's first place among the answer's sources; null when the answer does not link to the site.
per_engine[].datestring or nullThe day of the answer, YYYY-MM-DD; null without a current answer.
also_mentionedarray<string>The other domains that appear most often in the current answers (cited or named), at most 3.
weeksarrayThe best status over the AIs per week, oldest first, 12 weeks.
weeks[].datestringThe Monday of the week, YYYY-MM-DD.
weeks[].statusstring or nulllinked, mentioned, none, nosearch, or null without an answer that week.

aiinsights.prompt

POST /rest/v1/aiinsights.prompt · MCP tool get_aiinsights_prompt

Returns one prompt up close: per AI its status per week over the last 12 weeks, and its latest answer with the text, the sources it cited (the site's own pages marked) and the other sites in it; plus the site's own pages the AIs cite, with their visits from AI over the last 28 days (GA4).

Arguments

ArgumentTypeWhat it does
site_id (required)stringThe site: its id from list_sites, or the id in the app’s address.
prompt_id (required)stringThe id from aiinsights.prompts.

Example request

curl -X POST https://app.marketingtracer.com/rest/v1/aiinsights.prompt \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"site_id":"YOUR_SITE_ID","prompt_id":"6ae4bb24c906bf28bc7fa65e"}'

Example response · A real answer, anonymised and shortened to two items per list.

{
  "data": {
    "id": "6ae4bb24c906bf28bc7fa65e",
    "prompt": "Waar koop ik accessoires voor een BYD Seal U DM-i?",
    "country": "nl",
    "language": "nl",
    "engines": ["chatgpt", "gemini"],
    "brand_terms": ["Example Shop"],
    "created_at": "2026-10-30T15:43:32Z",
    "per_engine": [
      {
        "key": "chatgpt",
        "label": "ChatGPT",
        "weeks": [
          {"date": "2026-10-19", "status": null, "position": null},
          {"date": "2026-10-26", "status": "linked", "position": 2}
        ],
        "answer": {
          "date": "2026-10-30",
          "status": "linked",
          "position": 2,
          "text": "Voor het aanschaffen van accessoires voor uw BYD Seal U DM-i in Nederland zijn er diverse opties beschikbaar:\n\n1. **Mardexo**: Deze Nederlandse webshop biedt specifieke accessoires voor de BYD Seal U DM-i …",
          "sources": [
            {
              "position": 1,
              "url": "https://mardexo.nl/collections/byd-seal-u-accessoires/products/opbergbak-bagageruimte-byd-seal-u-dm-i",
              "domain": "mardexo.nl",
              "own": false
            },
            {
              "position": 2,
              "url": "https://www.example-shop.com/byd-seal-u",
              "domain": "example-shop.com",
              "own": true
            }
          ],
          "other_sites": [
            {"domain": "mardexo.nl", "mentioned": true, "position": 1},
            {"domain": "broditnederland.nl", "mentioned": true, "position": 3}
          ]
        }
      },
      {
        "key": "gemini",
        "label": "Gemini",
        "weeks": [
          {"date": "2026-10-19", "status": null, "position": null},
          {"date": "2026-10-26", "status": "linked", "position": 3}
        ],
        "answer": {
          "date": "2026-10-30",
          "status": "linked",
          "position": 3,
          "text": "Voor accessoires en onderdelen voor de **BYD Seal U DM-i** kun je op verschillende plekken terecht …",
          "sources": [
            {
              "position": 1,
              "url": "https://www.topbyd.com/collections/byd-sealion-6-seal-u-accessoriess",
              "domain": "topbyd.com",
              "own": false
            },
            {
              "position": 2,
              "url": "https://www.shop4ev.com/en/collections/byd-seal-u",
              "domain": "shop4ev.com",
              "own": false
            }
          ],
          "other_sites": [
            {"domain": "topbyd.com", "mentioned": true, "position": 1},
            {"domain": "shop4ev.com", "mentioned": true, "position": 2}
          ]
        }
      }
    ],
    "own_pages": [
      {
        "url": "https://www.example-shop.com/byd-seal-u",
        "path": "/byd-seal-u",
        "cited_by": [{"key": "chatgpt", "position": 2}],
        "ai_sessions": null,
        "conversions": null,
        "revenue_eur": null
      }
    ]
  },
  "meta": {"site_id": "YOUR_SITE_ID"}
}

Response fields · in data:

FieldTypeWhat it is
idstringThe prompt id.
promptstringThe question as asked.
countrystring or nullTwo-letter code of the country the prompt is asked for; null when not set.
languagestring or nullTwo-letter language code; null when not set.
enginesarray<string>The AIs this prompt is asked to.
brand_termsarray<string>Extra names looked for in the answers to this prompt.
created_atstring or nullWhen the prompt was added, ISO 8601 UTC.
per_enginearrayPer AI.
per_engine[].keystringchatgpt or gemini.
per_engine[].labelstringThe name to show.
per_engine[].weeksarray12 weeks, oldest first.
per_engine[].weeks[].datestringThe Monday of the week, YYYY-MM-DD.
per_engine[].weeks[].statusstring or nulllinked, mentioned, none or nosearch; null without an answer that week.
per_engine[].weeks[].positioninteger or nullThe site's first place among the sources; null when that answer does not link to the site.
per_engine[].answerobject or nullThe current answer (the latest, at most 62 days old); null when there is none.
per_engine[].answer.datestringThe day of the answer, YYYY-MM-DD.
per_engine[].answer.statusstringlinked, mentioned, none or nosearch.
per_engine[].answer.positioninteger or nullThe site's first place among the sources; null when the answer does not link to the site.
per_engine[].answer.textstringThe answer as the AI gave it (usually Markdown), cut at 6,000 characters.
per_engine[].answer.sourcesarrayThe pages the answer cites, in order.
per_engine[].answer.sources[].positionintegerThe place among the sources.
per_engine[].answer.sources[].urlstringThe page.
per_engine[].answer.sources[].domainstringIts domain.
per_engine[].answer.sources[].ownbooleanWhether it is a page of the site itself.
per_engine[].answer.other_sitesarrayThe other sites in the answer.
per_engine[].answer.other_sites[].domainstringThe domain.
per_engine[].answer.other_sites[].mentionedbooleanWhether the text names it.
per_engine[].answer.other_sites[].positioninteger or nullIts first place among the sources; null when only named.
own_pagesarrayThe site's own pages the current answers cite.
own_pages[].urlstringThe page.
own_pages[].pathstringIts path.
own_pages[].cited_byarrayWhich AI cites it, and where.
own_pages[].cited_by[].keystringchatgpt or gemini.
own_pages[].cited_by[].positioninteger or nullThis page's place among that answer's sources.
own_pages[].ai_sessionsinteger or nullVisits from AI assistants to this page, last 28 days; null without GA4.
own_pages[].conversionsnumber or nullKey events of those visits, last 28 days (GA4); null without GA4.
own_pages[].revenue_eurnumber or nullRevenue of those visits in euro, last 28 days (GA4); null without GA4.

aiinsights.competitors

POST /rest/v1/aiinsights.competitors · MCP tool get_aiinsights_competitors

Returns who appears in the current answers to the site's prompts (named or cited), against 28 days earlier: the site itself, the other sites (the 15 that appear most, plus every followed competitor), the pages of other sites the AIs cite most often, and the followed competitors.

Arguments

ArgumentTypeWhat it does
site_id (required)stringThe site: its id from list_sites, or the id in the app’s address.

Example request

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

Example response · A real answer, anonymised and shortened to two items per list.

{
  "data": {
    "answers": 58,
    "own": {
      "domain": "example-shop.com",
      "answers": 58,
      "mentioned": 10,
      "linked": 9,
      "mentioned_previous": 0,
      "per_engine": [
        {"key": "chatgpt", "label": "ChatGPT", "mentioned": 4},
        {"key": "gemini", "label": "Gemini", "mentioned": 6}
      ]
    },
    "cited_pages": [
      {
        "url": "https://www.leapmotor.net/nl-nl/andere-producten/b10-accessoires",
        "domain": "leapmotor.net",
        "citations": 2,
        "prompts": 1
      },
      {
        "url": "https://www.car-blaze.com/collections/leapmotor-b10",
        "domain": "car-blaze.com",
        "citations": 2,
        "prompts": 1
      }
    ],
    "sites": [
      {
        "domain": "youtube.com",
        "answers": 8,
        "mentioned": 6,
        "linked": 8,
        "answers_previous": 0,
        "followed": false,
        "per_engine": [
          {"key": "chatgpt", "label": "ChatGPT", "answers": 6},
          {"key": "gemini", "label": "Gemini", "answers": 2}
        ]
      },
      {
        "domain": "google.com",
        "answers": 7,
        "mentioned": 6,
        "linked": 7,
        "answers_previous": 0,
        "followed": false,
        "per_engine": [
          {"key": "chatgpt", "label": "ChatGPT", "answers": 6},
          {"key": "gemini", "label": "Gemini", "answers": 1}
        ]
      }
    ],
    "competitors": []
  },
  "meta": {"site_id": "YOUR_SITE_ID"}
}

Response fields · in data:

FieldTypeWhat it is
answersintegerCurrent answers (per prompt and AI the latest, at most 62 days old).
ownobjectThe site itself.
own.domainstringThe site's domain.
own.answersintegerThe same as answers.
own.mentionedintegerCurrent answers that mention the site.
own.linkedintegerCurrent answers that link to it.
own.mentioned_previousinteger or nullAnswers that mentioned it 28 days earlier; null when there were no answers then.
own.per_enginearrayMentions per AI.
own.per_engine[].keystringchatgpt or gemini.
own.per_engine[].labelstringThe name to show.
own.per_engine[].mentionedintegerAnswers that mention the site.
sitesarrayOther sites in the current answers (cited or named): the 15 that appear most, then every other followed competitor (with 0 when absent).
sites[].domainstringThe domain.
sites[].answersintegerAnswers it appears in (named or as a source).
sites[].mentionedintegerAnswers whose text names it.
sites[].linkedintegerAnswers that cite it as a source.
sites[].answers_previousinteger or nullAnswers it appeared in 28 days earlier; null when there were no answers then.
sites[].followedbooleanWhether it is a followed competitor.
sites[].per_enginearrayAnswers per AI.
sites[].per_engine[].keystringchatgpt or gemini.
sites[].per_engine[].labelstringThe name to show.
sites[].per_engine[].answersintegerAnswers it appears in.
cited_pagesarrayPages of other sites the AIs cite most, at most 8.
cited_pages[].urlstringThe page.
cited_pages[].domainstringIts domain.
cited_pages[].citationsintegerIn how many current answers it is a source.
cited_pages[].promptsintegerFor how many prompts.
competitorsarray<string>The followed competitors (the list shared with the Rank tracker).

aiinsights.traffic_summary

POST /rest/v1/aiinsights.traffic_summary · MCP tool get_aiinsights_traffic_summary

Returns the visits from AI assistants (ChatGPT, Perplexity, Gemini, Copilot, Claude and others) in Google Analytics 4 for the period: sessions, engaged sessions, key events and revenue against the previous period, the share of all visits, and the same per AI. Without GA4 data, ga4_connected is false, the figures are null and per_engine is empty.

Arguments

ArgumentTypeWhat it does
site_id (required)stringThe site: its id from list_sites, or the id in the app’s address.
fromstring, YYYY-MM-DDFirst day of the period, YYYY-MM-DD; give it together with to. Without from and to, the period is the last 28 days up to yesterday, against the 28 days before.
tostring, YYYY-MM-DDLast day of the period, YYYY-MM-DD (at most yesterday); give it together with from. The previous period is then the same days one month earlier.

Example request

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

Example response · A real answer, anonymised and shortened to two items per list.

{
  "data": {
    "ga4_connected": true,
    "sessions": {"value": 59, "previous": 26, "change": 33, "change_pct": 126.9},
    "engaged_sessions": {"value": 46, "previous": 17, "change": 29, "change_pct": 170.6},
    "conversions": {"value": 0, "previous": 0, "change": 0, "change_pct": null},
    "revenue_eur": {"value": 0, "previous": 0.06, "change": -0.06, "change_pct": -100},
    "all_sessions": 26226,
    "ai_share_pct": 0.22,
    "per_engine": [
      {
        "key": "chatgpt",
        "label": "ChatGPT",
        "sessions": 59,
        "engaged_sessions": 46,
        "conversions": 0,
        "revenue_eur": 0
      }
    ]
  },
  "meta": {
    "site_id": "YOUR_SITE_ID",
    "period": {
      "from": "2026-10-02",
      "to": "2026-10-29",
      "compare_from": "2026-09-04",
      "compare_to": "2026-10-01"
    }
  }
}

Response fields · in data:

FieldTypeWhat it is
ga4_connectedbooleanWhether GA4 data came back (false when GA4 is not connected or did not answer).
sessionsobject or nullSessions from AI assistants in the period, against the previous period.
sessions.valuenumber or nullThis period.
sessions.previousnumber or nullThe previous period; null when there was nothing to compare with.
sessions.changenumber or nullvalue minus previous (for a _pct field: percentage points).
sessions.change_pctnumber or nullThe change in percent of previous; null when previous is 0 or null.
engaged_sessionsobject or nullEngaged sessions from AI assistants in the period, against the previous period.
engaged_sessions.valuenumber or nullThis period.
engaged_sessions.previousnumber or nullThe previous period; null when there was nothing to compare with.
engaged_sessions.changenumber or nullvalue minus previous (for a _pct field: percentage points).
engaged_sessions.change_pctnumber or nullThe change in percent of previous; null when previous is 0 or null.
conversionsobject or nullKey events of those sessions in the period, against the previous period.
conversions.valuenumber or nullThis period.
conversions.previousnumber or nullThe previous period; null when there was nothing to compare with.
conversions.changenumber or nullvalue minus previous (for a _pct field: percentage points).
conversions.change_pctnumber or nullThe change in percent of previous; null when previous is 0 or null.
revenue_eurobject or nullRevenue of those sessions in euro in the period, against the previous period.
revenue_eur.valuenumber or nullThis period.
revenue_eur.previousnumber or nullThe previous period; null when there was nothing to compare with.
revenue_eur.changenumber or nullvalue minus previous (for a _pct field: percentage points).
revenue_eur.change_pctnumber or nullThe change in percent of previous; null when previous is 0 or null.
all_sessionsinteger or nullAll sessions of the site in the period.
ai_share_pctnumber or nullSessions from AI as a share of all sessions, 0-100.
per_enginearrayPer AI, most sessions first.
per_engine[].keystringchatgpt, perplexity, gemini, copilot, claude, deepseek, meta, grok, mistral, you, phind or poe.
per_engine[].labelstringThe name to show.
per_engine[].sessionsintegerSessions.
per_engine[].engaged_sessionsintegerEngaged sessions.
per_engine[].conversionsnumberKey events.
per_engine[].revenue_eurnumberRevenue in euro.

aiinsights.traffic_pages

POST /rest/v1/aiinsights.traffic_pages · MCP tool get_aiinsights_traffic_pages

Returns the visits from AI assistants per landing page in the period (GA4), most first: per AI, engaged sessions, key events, revenue, the sessions in the previous period, and for how many prompts a current answer cites the page. Empty without GA4 data.

Arguments

ArgumentTypeWhat it does
site_id (required)stringThe site: its id from list_sites, or the id in the app’s address.
fromstring, YYYY-MM-DDFirst day of the period, YYYY-MM-DD; give it together with to. Without from and to, the period is the last 28 days up to yesterday, against the 28 days before.
tostring, YYYY-MM-DDLast day of the period, YYYY-MM-DD (at most yesterday); give it together with from. The previous period is then the same days one month earlier.
limitinteger, 1 to 5,000, default 500Pages per call.
cursorstringmeta.next_cursor of the previous call, for the next page.

Example request

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

Example response · A real answer, anonymised and shortened to two items per list.

{
  "data": [
    {
      "url": "https://example-blog.com/names/josiah",
      "path": "/names/josiah",
      "sessions": 4,
      "sessions_previous": 0,
      "engaged_sessions": 2,
      "conversions": 0,
      "revenue_eur": 0,
      "per_engine": [{"key": "chatgpt", "label": "ChatGPT", "sessions": 4}],
      "cited_by_prompts": 0
    },
    {
      "url": "https://example-blog.com/forum/first-symptoms",
      "path": "/forum/first-symptoms",
      "sessions": 3,
      "sessions_previous": 1,
      "engaged_sessions": 1,
      "conversions": 0,
      "revenue_eur": 0,
      "per_engine": [{"key": "chatgpt", "label": "ChatGPT", "sessions": 3}],
      "cited_by_prompts": 0
    }
  ],
  "meta": {"site_id": "YOUR_SITE_ID", "next_cursor": "2", "total": 49}
}

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

FieldTypeWhat it is
urlstring or nullThe landing page; null for GA4's (not set).
pathstringIts path with the query string, without tracking parameters (utm_*, gclid, fbclid, msclkid, srsltid); (not set) as GA4 gives it.
sessionsintegerSessions from AI assistants.
sessions_previousintegerThe same in the previous period.
engaged_sessionsintegerEngaged sessions.
conversionsnumberKey events.
revenue_eurnumberRevenue in euro.
per_enginearraySessions per AI, most first.
per_engine[].keystringchatgpt, perplexity, …
per_engine[].labelstringThe name to show.
per_engine[].sessionsintegerSessions.
cited_by_promptsintegerFor how many prompts a current answer cites this page.

aiinsights.traffic_monthly

POST /rest/v1/aiinsights.traffic_monthly · MCP tool get_aiinsights_traffic_monthly

Returns the visits from AI assistants per month for the 16 months up to the month of to (GA4): sessions per AI, plus key events and revenue for the month. The last month is incomplete until it ends (complete false). Empty without GA4 data.

Arguments

ArgumentTypeWhat it does
site_id (required)stringThe site: its id from list_sites, or the id in the app’s address.
tostring, YYYY-MM-DDLast day, YYYY-MM-DD (at most yesterday). Defaults to yesterday.

Example request

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

Example response · A real answer, anonymised and shortened to two items per list.

{
  "data": [
    {
      "month": "2025-07",
      "sessions": 19,
      "per_engine": [
        {"key": "chatgpt", "label": "ChatGPT", "sessions": 15},
        {"key": "perplexity", "label": "Perplexity", "sessions": 4}
      ],
      "conversions": 0,
      "revenue_eur": 0.01,
      "complete": true
    },
    {
      "month": "2025-08",
      "sessions": 32,
      "per_engine": [
        {"key": "chatgpt", "label": "ChatGPT", "sessions": 31},
        {"key": "grok", "label": "Grok", "sessions": 1}
      ],
      "conversions": 0,
      "revenue_eur": 0,
      "complete": true
    }
  ],
  "meta": {"site_id": "YOUR_SITE_ID", "next_cursor": null, "total": 16}
}

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

FieldTypeWhat it is
monthstringYYYY-MM.
sessionsintegerSessions from AI assistants.
per_enginearraySessions per AI, most first.
per_engine[].keystringchatgpt, perplexity, …
per_engine[].labelstringThe name to show.
per_engine[].sessionsintegerSessions.
conversionsnumberKey events.
revenue_eurnumberRevenue in euro.
completebooleanWhether the month is over (false for the month of to, unless to is its last day).

aiinsights.ai_overviews

POST /rest/v1/aiinsights.ai_overviews · MCP tool get_aiinsights_ai_overviews

Returns Google's AI Overview at the site's Rank tracker keywords, one item per keyword with an AI Overview reading (its latest measurement): whether Google showed an AI Overview, the site's place among its sources, the other sites it cites, and the organic position. Keywords with an AI Overview come first, then by the site's place, then by keyword. Needs keywords in the Rank tracker.

Arguments

ArgumentTypeWhat it does
site_id (required)stringThe site: its id from list_sites, or the id in the app’s address.

Example request

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

Example response · A real answer, anonymised and shortened to two items per list.

{
  "data": [
    {
      "keyword_id": "6ae0d00f1a123fbf9d03c6d2",
      "keyword": "auto zonnescherm",
      "country": "nl",
      "device": "desktop",
      "ai_overview": false,
      "position": null,
      "also_cited": [],
      "organic_position": 2,
      "measured_at": "2026-10-29T23:06:31Z"
    },
    {
      "keyword_id": "6ae0d00f1a123fbf9d03c6d4",
      "keyword": "automatten",
      "country": "nl",
      "device": "desktop",
      "ai_overview": false,
      "position": null,
      "also_cited": [],
      "organic_position": null,
      "measured_at": "2026-10-29T23:06:31Z"
    }
  ],
  "meta": {"site_id": "YOUR_SITE_ID", "next_cursor": null, "total": 10}
}

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

FieldTypeWhat it is
keyword_idstringThe keyword id in the Rank tracker.
keywordstringThe keyword.
countrystringTwo-letter country code.
devicestringdesktop or mobile.
ai_overviewbooleanWhether Google showed an AI Overview.
positioninteger or nullThe site's place among the AI Overview's sources; null when not cited.
also_citedarray<string>Other domains among its sources, at most 3.
organic_positioninteger or nullThe site's best organic position in the same measurement; null when not in the measured top.
measured_atstringWhen it was measured, ISO 8601 UTC.
White-label / agency

AI visibility for every client. Under your name.

One key reads AI Insights for every client site you can open, so your own AI report runs for all of them at once. On a white-label dashboard the API answers on your own domain. The whole dashboard is white label: your domain, logo and colours, and team roles that set which modules each role sees.

APIRank tracker API ProductSEO MCP APIThe MarketingTracer API

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

FAQ

Something else? Ask us.

What is an AI visibility API?

An AI visibility API, or LLM visibility API, tells your own software whether AI assistants name your brand and link to your site when people ask them questions. This one gives what AI Insights measures for the sites in your account.

Which AI assistants?

We ask your prompts to ChatGPT and Gemini, with web search. Visits are counted from more assistants: ChatGPT, Perplexity, Gemini, Copilot, Claude and others, as your GA4 sees them.

Can I trust the numbers?

They are real answers from ChatGPT and Gemini, asked for your prompts, and the API gives the latest answer per prompt and AI. AI answers change from one run to the next, so read a trend over weeks before you act on a single answer.

Do I need GA4?

Only for the visits, conversions and revenue. Mentions, links and competitors work without it.

How many prompts can I track?

Every site comes with a package of measurements; one measurement is one prompt asked to one AI. A bigger package costs extra. Your package and how much of it is in use are in aiinsights.summary.

Can I add prompts through the API?

Not yet. You add prompts in the app; the API reads them and their answers.

What does it cost?

The API costs nothing extra; it is part of every plan. What you measure follows your AI Insights package: one comes with every site, a bigger one costs extra. Prices are on the pricing page.