POST /v1/monitors
SERP Monitoring API
A Google Alerts you can program: save a search or news query, choose a schedule, and receive only the results you haven't seen before, signed, at your webhook. Or watch a page and hear when its content changes.
Overview
What the SERP Monitoring API does
A monitor saves a /v1/search or /v1/news request and runs it hourly, daily, weekly or on any interval from 1 hour to 30 days. Each run reports only the results it hasn't reported before. With endpoint: "webpage" and a url, it watches a page and reports when its content changes, with the new Markdown.
New results are kept in the monitor's run history for 24 hours and, with a webhook_url, posted as a signed monitor.results event. Monitors keep search options such as country, language, time, domain filters and engine, so a monitor can watch Google, or fall back to other engines with engine: "auto".
Up to 100 monitors per account. A monitor pauses itself after 10 failed runs in a row.
What you get
-
idstring - The monitor's ID, for GET, PATCH, DELETE /v1/monitors/{id}, POST /v1/monitors/{id}/run (run at the next poll, within about 30 seconds) and GET /v1/monitors/{id}/runs.
-
requestobject - The saved search (q and options), watched url, or AI prompt (with country, language, web_search, track).
-
interval_seconds / next_run_at / last_run_atmixed - The schedule.
-
last_status / last_error / last_new_resultsmixed - The last run: ok, error, webhook_failed or paused, and how many new results it found.
-
runs / consecutive_failures / credits_usednumber - Totals over all runs; the failure streak pauses the monitor at 10.
Request
curl https://api.serpkite.com/v1/monitors \
-H "Authorization: Bearer $SERPKITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"q":"ai agents funding","endpoint":"news","interval":"daily","webhook_url":"https://example.com/hooks/serpkite"}'Response (illustrative, placeholder domains)
{
"id": "01926a3e-9d1f-7a2b-8c3d-4e5f6a7b8c9d",
"name": "",
"endpoint": "news",
"request": {
"q": "ai agents funding"
},
"metadata": null,
"interval_seconds": 86400,
"webhook_url": "https://example.com/hooks/serpkite",
"active": true,
"next_run_at": "2026-10-04T12:00:00Z",
"last_run_at": "2026-10-03T12:00:05Z",
"last_status": "ok",
"last_error": null,
"last_new_results": 10,
"runs": 1,
"consecutive_failures": 0,
"credits_used": 1,
"created_at": "2026-10-03T12:00:00Z"
}
Every response also carries X-Credits-Used, X-Credits-Remaining,
X-Cache and X-Tokens-Estimate headers.
Full endpoint reference
Reference
Parameters
The fields /v1/monitors accepts in its JSON body.
| Name | Type | Default | Description |
|---|---|---|---|
q
|
string | – | The query, for search and news monitors. |
url
|
string | – | The page to watch, for endpoint: "webpage". |
prompt
|
string | – | The prompt asked every run, for AI assistant monitors (up to 4,000 characters). |
endpoint
|
string | search | What to run. Values: search, news, webpage, chatgpt, gemini, copilot, ai_mode, brave_ai. |
interval
|
string | daily | How often to run. Values: hourly, daily, weekly. |
interval_seconds
|
integer | – | Exact interval, 3,600–2,592,000 seconds. Overrides interval. |
webhook_url
|
string | – | Receives signed monitor.results events. Without one, read new results from the run history. |
name
|
string | – | Your label, up to 200 characters. |
active
|
boolean | true | false creates the monitor paused. |
metadata
|
object | – | Your own JSON object (up to 2 KB), echoed on the monitor and in its webhooks. |
country
|
string | us | Country to search from, as a two-letter ISO code (us, gb, de, in…). Defaults to the country a location ends in. |
language
|
string | en | Interface language, as a language code with an optional region (en, de, pt-BR, zh-TW…). |
location
|
string | – | Canonical location for local results, e.g. "Austin, Texas, United States". Ending in a country name also sets country. |
time
|
string | – | Restrict to recent results. Shorthand for tbs=qdr:*. Values: hour, day, week, month, year. |
num
|
integer | – | Watch only the top num results (1–100). |
device
|
string | desktop | Which SERP layout to fetch. Values: desktop, mobile. |
safe
|
string | off | SafeSearch filtering. Values: off, active. |
include_domains
|
string[] | – | Only results from these sources, up to 20: a domain (example.com, subdomains match), a path prefix (github.com/org) or a TLD (.gov). Compiled to site: operators and enforced on the results. Search, news, images, videos. |
exclude_domains
|
string[] | – | Drop results from these sources, up to 20, same formats as include_domains. Search, news, images, videos. |
engine
|
string or array | Which search providers may answer. google is Google only (SerpKite still retries Google internally); auto falls back to other providers when Google is blocked or times out; consensus (search only) asks several independent indexes in parallel, merges the results by URL, ranks them by agreement and lists each result's sources, at the sum of one page per provider that returned results; a provider name or a list (e.g. google,brave) restricts the request to those. meta.engine names the provider that answered. Values: google, auto, consensus, brave, bing, yahoo, duckduckgo, mojeek, wikipedia, yandex. | |
web_search
|
boolean | – | endpoint: "chatgpt" only: make ChatGPT search the web (default true). |
track
|
string[] | – | AI assistant monitors: up to 20 brands or domains to check every answer for (mentions). |
Full reference, error codes and headers are in the /v1/monitors reference.
Use cases
What people build with the SERP Monitoring API
Brand and competitor alerts
Get new news articles and pages that mention a brand, every hour or day.
Agent triggers
Wake an agent when new results appear, through a signed webhook.
Release and policy pages
Watch a changelog, pricing or terms page and get its new Markdown when it changes.
Research feeds
Follow a topic across Google and fallback engines without re-reading old results.
Pricing
SERP Monitoring API pricing
Cost per call
1 credit
per run, priced like the search or page fetch it makes (1 per 10 results, num=100 is 7); empty and failed runs are free
- From $0.60 per 1,000 runs at volume.
- Credits never expire. No subscription.
- Failed, empty and blocked calls are refunded.
- 2,500 free credits = 2,500 runs, then 1,000 credits a month.
| Pack | Price | Per 1k credits | Per 1k runs | Runs per pack |
|---|---|---|---|---|
| Starter | $10 | $1.00 | $1.00 | 10,000 |
| Growth | $50 | $0.80 | $0.80 | 62,500 |
| Pro | $300 | $0.60 | $0.60 | 500,000 |
FAQ
SERP Monitoring API: common questions
Keep exploring
Related APIs and integrations
Start building
Start with the SERP Monitoring API
2,500 free credits, then 1,000 every month. No credit card.