Structured data against Google's requirements
https://seolyticize.com /api/v1/tools/validate_structured_data Checks JSON-LD against what Google's search gallery requires and recommends for each rich result type — Article, Breadcrumb, Course list (Course + ItemList), Carousel (ItemList), Dataset, Discussion forum, Event, Image metadata, Job posting, Local business, Movie, Organization, Product (snippets and merchant listings), Profile page, Q&A, Recipe, Review and rating, Software app, Vacation rental, Video, Site name — plus FAQ (retired for every site on 7 May 2026), HowTo, the 2025–2026 retirements (special announcement, fact check, vehicle listing, estimated salary, practice problem), Service and SoftwareSourceCode, which earn no rich result any more (or never did). Values Google cannot read (non-ISO dates and durations, prices with currency signs, relative URLs that are not URLs) are errors. Give url to read one of the client's pages live, or a crawlId (default latest) for the whole site by type: pages, how many are valid, and the properties most often missing. Answers 'is our product markup eligible for rich results' and 'what structured data is broken'. Free.
Parameters
Idempotency-KeystringheaderRequest body
application/json
clientIdstringrequiredurlstringcrawlIdstringlimitinteger{
"clientId": "string",
"url": null,
"crawlId": "latest",
"limit": 50
}Code samples
cURL
curl -X POST "https://seolyticize.com/api/v1/tools/validate_structured_data" \
-H "Authorization: Bearer $SEOLYTICIZE_API_KEY" \
-H "Idempotency-Key: <value>" \
-H "Content-Type: application/json" \
-d '{"clientId":"string","url":null,"crawlId":"latest","limit":50}'TypeScript
Python
Go
PHP
Ruby
Java
Responses
data, and its meta.Example
{
"data": {},
"meta": {
"requestId": "string",
"costMicros": 0,
"cached": true,
"cachedFrom": "string",
"dataAsOf": "string",
"sources": [
"string"
],
"partial": true,
"next": [
{
"tool": "string",
"args": {},
"why": "string"
}
],
"nextCursor": "string",
"dryRun": true
}
}Schema
datarequiredmetaobjectrequiredShow child parameters
requestIdstringrequiredcostMicrosintegerrequiredcachedbooleanrequiredcachedFromstringdataAsOfstringsourcesstring[]partialbooleanrequirednextobject[]requiredShow child parameters
toolstringargsobjectwhystringnextCursorstringdryRunbooleanX-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerX-Request-IdstringExample
{
"error": "string",
"code": "string",
"next": "string",
"requestId": "string"
}Schema
errorstringrequiredcodestringnextstringrequestIdstringX-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/validate_structured_data
WWW-AuthenticatestringSame as 400 · POST /api/v1/tools/validate_structured_data
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/validate_structured_data
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/validate_structured_data
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/validate_structured_data
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/validate_structured_data
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerRetry-AfterintegerSame as 400 · POST /api/v1/tools/validate_structured_data
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-Resetinteger