Search Console
Read Google Search Console data for your project.
When someone on the team connects Google Search Console on the project’s Search page, PMKIN imports clicks, impressions, click-through rate and position about once a day. These endpoints read that data, matched to your documents. They’re read-only: connecting needs the web app.
Windows and totals#
Numbers cover two 28-day windows: current, the most recent 28 days of imported data, and previous, the 28 days before. windows gives each one’s startDate and endDate. Totals have these fields:
clicksinteger- Clicks from search results.
impressionsinteger- Times a result was shown.
ctrnumber- Clicks divided by impressions, to 4 decimals.
positionnumber | null- The average position, to 1 decimal. Lower is better. null without impressions.
409 with a message that says which step is missing. GET /summary shows whether it’s connected.Endpoints#
Get the search summary#
/search/summarySite totals for the last 28 days of final data (current) and the 28 days before (previous), plus daily clicks and impressions for the last days days.
daysinteger- How many days
seriescovers, 7 to 480. Defaults to 90.
Conflict409- Search Console isn’t connected, isn’t set up, or the first import hasn’t finished. The message says which and what to do.
curl "https://api.pmkin.io/search/summary?days=28" \-H "Authorization: Bearer $PMKIN_MANAGEMENT_TOKEN"
{"current": {"clicks": 412,"ctr": 0.0381,"impressions": 10814,"position": 8.4},"lastImportAt": "2026-10-10T04:12:09.000Z","previous": {"clicks": 355,"ctr": 0.0362,"impressions": 9807,"position": 9.1},"series": [{"clicks": 14,"date": "2026-10-07","impressions": 391},{"clicks": 17,"date": "2026-10-08","impressions": 402}],"siteUrl": "sc-domain:example.com","status": "active","windows": {"current": {"endDate": "2026-10-08","startDate": "2026-09-11"},"previous": {"endDate": "2026-09-10","startDate": "2026-08-14"}}}
List search queries#
/search/queriesSearch queries for the current 28-day window with their numbers in the previous one (previous, null when the query is new) and, when a page that ranks belongs to a document, that document. total counts every matching query.
documentIdstring- Only queries that lead to this document.
qstring- Text to find in queries, ignoring case. At most 200 characters.
sortstringclicks(the default),impressionsorctr, highest first, orposition, best first.limitinteger- How many to return, 1 to 100. Defaults to 50.
offsetinteger- How many to skip, 0 to 100,000. Defaults to 0.
Conflict409- Search Console isn’t connected, isn’t set up, or the first import hasn’t finished. The message says which and what to do.
BadRequest422sortisn’t one ofclicks,impressions,ctrorposition.
curl "https://api.pmkin.io/search/queries?limit=20&sort=impressions" \-H "Authorization: Bearer $PMKIN_MANAGEMENT_TOKEN"
{"queries": [{"clicks": 412,"ctr": 0.0381,"impressions": 10814,"position": 8.4,"document": {"id": "6704a1f0c2b3d4e5f6a7b8c9","slug": "headless-cms-pricing","title": "Headless CMS pricing"},"page": "https://example.com/blog/headless-cms-pricing","previous": {"clicks": 355,"ctr": 0.0362,"impressions": 9807,"position": 9.1},"query": "headless cms pricing"}],"total": 1284,"windows": {"current": {"endDate": "2026-10-08","startDate": "2026-09-11"},"previous": {"endDate": "2026-09-10","startDate": "2026-08-14"}}}
List search pages#
/search/pagesPages for the current 28-day window with their numbers in the previous one and, when the page belongs to a document, that document.
sortstringclicks(the default),impressionsorctr, highest first, orposition, best first.limitinteger- How many to return, 1 to 100. Defaults to 50.
offsetinteger- How many to skip, 0 to 100,000. Defaults to 0.
Conflict409- Search Console isn’t connected, isn’t set up, or the first import hasn’t finished. The message says which and what to do.
BadRequest422sortisn’t one ofclicks,impressions,ctrorposition.
curl "https://api.pmkin.io/search/pages" \-H "Authorization: Bearer $PMKIN_MANAGEMENT_TOKEN"
{"pages": [{"clicks": 412,"ctr": 0.0381,"impressions": 10814,"position": 8.4,"document": {"id": "6704a1f0c2b3d4e5f6a7b8c9","slug": "headless-cms-pricing","title": "Headless CMS pricing"},"page": "https://example.com/blog/headless-cms-pricing","previous": {"clicks": 355,"ctr": 0.0362,"impressions": 9807,"position": 9.1}}],"total": 87,"windows": {"current": {"endDate": "2026-10-08","startDate": "2026-09-11"},"previous": {"endDate": "2026-09-10","startDate": "2026-08-14"}}}
Get a document’s search performance#
/documents/:id/searchOne document’s numbers: totals for both windows, daily clicks and impressions for the last 90 days, and its top 10 queries.
idstringrequired- The document’s id.
NotFound404- No document with this id in the token’s project, or it was deleted.
Conflict409- Search Console isn’t connected, isn’t set up, or the first import hasn’t finished. The message says which and what to do.
curl "https://api.pmkin.io/documents/6704a1f0c2b3d4e5f6a7b8c9/search" \-H "Authorization: Bearer $PMKIN_MANAGEMENT_TOKEN"
{"current": {"clicks": 412,"ctr": 0.0381,"impressions": 10814,"position": 8.4},"documentId": "6704a1f0c2b3d4e5f6a7b8c9","previous": {"clicks": 355,"ctr": 0.0362,"impressions": 9807,"position": 9.1},"series": [{"clicks": 14,"date": "2026-10-07","impressions": 391},{"clicks": 17,"date": "2026-10-08","impressions": 402}],"topQueries": [{"clicks": 412,"ctr": 0.0381,"impressions": 10814,"position": 8.4,"document": {"id": "6704a1f0c2b3d4e5f6a7b8c9","slug": "headless-cms-pricing","title": "Headless CMS pricing"},"page": "https://example.com/blog/headless-cms-pricing","previous": {"clicks": 355,"ctr": 0.0362,"impressions": 9807,"position": 9.1},"query": "headless cms pricing"}],"windows": {"current": {"endDate": "2026-10-08","startDate": "2026-09-11"},"previous": {"endDate": "2026-09-10","startDate": "2026-08-14"}}}