v1Resources/SEO/postDownload a branded ranking report
Download a branded ranking report
Builds the branded, section-configurable ranking report — the same "Download Report" action in the app. Returns rendered HTML, not a binary PDF: rasterizing to PDF happens in the browser (no headless-Chrome renderer runs server-side), so turning this into an actual PDF file is on the caller, the same constraint the app's own UI has. Distinct from POST /api/v1/seo/reports/generate, which only enqueues a background rank-grid scan and returns no document.
post
seo:read/api/v1/seo/reportsRequest body
locationIdstringrequired
The location to report on.
presetstringoptional
Date-range preset, e.g. "lastMonth" (default).
fromstringoptional
Custom range start (ISO date). Requires to.
tostringoptional
Custom range end (ISO date). Requires from.
keywordsarray of stringoptional
Limit to these tracked keyword ids. Omit for all.
sectionsobjectoptional
Which report sections to include, by key. Omitted keys use the report's own defaults.
coverPagebooleanoptional
executiveSummarybooleanoptional
performanceSnapshotbooleanoptional
agencyActivityLogbooleanoptional
gridRankSnapshotsbooleanoptional
keywordPerformanceTablebooleanoptional
monthOverMonthTrendbooleanoptional
competitorLandscapebooleanoptional
aiRecommendationsbooleanoptional
notesstringoptional
Free-text notes to include on the report.
localestringoptional
Language for the rendered report. Defaults to en.
Response
dataobjectoptional
htmlstringoptional
The rendered report as a self-contained HTML document.
filenamestringoptional
Suggested filename for the report.
Errors
400The request is missing a required parameter or is otherwise malformed.
401Missing, invalid, expired, or revoked API key.
403The key lacks the required scope, or isn't authorized for this client/location.
429Too many requests. Retry after the number of seconds in the Retry-After header.
502The report couldn't be built (a data-source failure, not a client error).
post/api/v1/seo/reports
Your API key
Request body*
{
"data": {
"html": "<style>#seo-report{width:100%;...}</style><div id=\"seo-report\"><section class=\"cover\"><h1>Ranking Analytics Report</h1><div class=\"biz\">Acme Dental — Downtown</div></section>...</div>",
"filename": "Acme_Dental_Downtown_RankingReport_Jan2026_Feb2026.pdf"
}
}Guides that use this resource
- What Is a Local SEO API?A local SEO API measures how a business ranks in local search, with geo-grid rank tracking, profile analytics and AI visibility, not just backlinks.
- How to Add Local Marketing Features to Your SaaSAdd listings management, reviews, Google posts, profile analytics, rank tracking and AI visibility to a SaaS product with the Synup API, tenant by tenant.
- How to Build an AI Agent for Local SEOBuild an AI agent that audits and fixes listings, tracks local rankings, checks AI visibility and drafts review replies with Synup's MCP server or REST tools.
- How to Build a Multi-Location Marketing DashboardBuild a multi-location marketing dashboard from the API's rollup endpoints, one call per panel, covering listings, reviews, rank, AI visibility and duplicates.
- How to Add Local Marketing Functionality to Vertical SaaSAdd local marketing to a vertical SaaS by mapping existing customers to clients and locations, and shipping only the features your niche needs.
- Local SEO APIs: What Developers Actually NeedA practical checklist of what a local SEO API must cover, from listings and sync status to reviews, rank tracking and AI visibility, mapped to endpoints.
- How to Track Local Rankings with an APITrack local search rankings on a geo grid through an API, add keywords, read the grid and trend, and compare against competitors and citation coverage.
- How to Monitor Local SEO Across Multiple LocationsMonitor local SEO across hundreds of locations through rollup endpoints, with rank and AI visibility per location and the weakest surfaced first.
- Fetch Local Keyword Rankings via APITrack local search rankings on a geo grid with the Synup API, add keywords for a location, and read the rank trend once the background scan lands.