1. LANDING — `/docs`
Documentation root page — TechArticle + ItemList of top actions
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
{
"@type": "SoftwareApplication",
"@id": "https://algoseek.com/#datasets-api",
"name": "Algoseek Datasets API",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "All",
"url": "https://algoseek.com/docs",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#website"
},
"softwareVersion": "v1",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"description": "Free tier available; paid plans for production volume."
}
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Algoseek",
"item": "https://algoseek.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Documentation",
"item": "https://algoseek.com/docs"
}
]
},
{
"@type": "TechArticle",
"@id": "https://algoseek.com/docs#article",
"url": "https://algoseek.com/docs",
"name": "algoseek Datasets API Documentation",
"headline": "algoseek Datasets API | Institutional Market Data Reference",
"description": "Access regulatory-grade US market data via the algoseek Datasets API. Unified architecture for backtesting and production with proprietary security masters for equities, options, and futures.",
"inLanguage": "en-US",
"isPartOf": {
"@id": "https://algoseek.com/#datasets-api"
},
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"audience": {
"@type": "Audience",
"audienceType": "Quantitative researchers, algorithmic traders, data engineers"
},
"mainEntity": {
"@type": "ItemList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"item": {
"@type": "Thing",
"name": "Getting Started",
"url": "https://algoseek.com/docs/rest-api/intro"
}
},
{
"@type": "ListItem",
"position": 2,
"item": {
"@type": "Thing",
"name": "API Reference",
"url": "https://algoseek.com/docs/rest-api/reference"
}
},
{
"@type": "ListItem",
"position": 3,
"item": {
"@type": "Thing",
"name": "Tutorials",
"url": "https://algoseek.com/docs/rest-api/tutorials"
}
}
]
}
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
{
"@type": "SoftwareApplication",
"@id": "https://algoseek.com/#datasets-api",
"name": "Algoseek Datasets API",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "All",
"url": "https://algoseek.com/docs",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#website"
},
"softwareVersion": "v1",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"description": "Free tier available; paid plans for production volume."
}
},
"{{ breadcrumb }}",
{
"@type": "TechArticle",
"@id": "{{ canonical_url }}#article",
"url": "{{ canonical_url }}",
"name": "{{ page.h1 }}",
"headline": "{{ page.meta_title }}",
"description": "{{ page.meta_description }}",
"inLanguage": "en-US",
"isPartOf": {
"@id": "https://algoseek.com/#datasets-api"
},
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"author": {
"@id": "https://algoseek.com/#organization"
},
"dateModified": "{{ page.updated_at | iso_date }}",
"audience": {
"@type": "Audience",
"audienceType": "{{ audience_label | default('Quantitative researchers, algorithmic traders, data engineers') }}"
},
"mainEntity": "{{ IF top_links | length >= 1 then emit: {'@type':'ItemList', itemListElement:[for each link emit {'@type':'ListItem', position, item:{'@type':'Thing', name, url}}]} ELSE OMIT mainEntity entirely (do NOT emit empty array) }}"
}
]
}
</script>
Implementation notes
- Why `TechArticle` — Documentation root acts as long-form article describing the API as a whole.
- `SoftwareApplication` parent — Single entity `#datasets-api` referenced by every doc page via `isPartOf` — unifies 88 pages under one entity for Google KG.
- `mainEntity ItemList` — Top-3 next actions (Quickstart / Reference / Tutorials) for AI Overviews.
- `audience.audienceType` — Concrete persona — better than generic schema.Audience.
2. GUIDE — `/docs/rest-api/{slug}`
Conceptual / how-to-think guide pages (intro, authentication, data-schema, error-handling, ...) — TechArticle + FAQPage when applicable
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
{
"@type": "SoftwareApplication",
"@id": "https://algoseek.com/#datasets-api",
"name": "Algoseek Datasets API",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "All",
"url": "https://algoseek.com/docs",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#website"
},
"softwareVersion": "v1",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"description": "Free tier available; paid plans for production volume."
}
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Algoseek",
"item": "https://algoseek.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Documentation",
"item": "https://algoseek.com/docs"
},
{
"@type": "ListItem",
"position": 3,
"name": "How to Authenticate",
"item": "https://algoseek.com/docs/rest-api/authentication"
}
]
},
{
"@type": "TechArticle",
"@id": "https://algoseek.com/docs/rest-api/authentication#article",
"url": "https://algoseek.com/docs/rest-api/authentication",
"name": "How to Authenticate the algoseek Datasets API",
"headline": "How to Authenticate the algoseek Datasets API",
"description": "Generate an API key, send it via the X-API-KEY header, and verify your identity against the algoseek auth service.",
"inLanguage": "en-US",
"isPartOf": {
"@id": "https://algoseek.com/#datasets-api"
},
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"author": {
"@id": "https://algoseek.com/#organization"
},
"dateModified": "2026-05-27",
"datePublished": "2025-09-01",
"proficiencyLevel": "Beginner"
},
{
"@type": "FAQPage",
"@id": "https://algoseek.com/docs/rest-api/authentication#faq",
"mainEntity": [
{
"@type": "Question",
"name": "How do I get an API key?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Sign in to the algoseek Console, open the API Keys panel, and click Create New Key. Your key is shown once — store it securely."
}
},
{
"@type": "Question",
"name": "Where do I put the API key in a request?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Send it as the `X-API-KEY` HTTP header on every request. Do not include it as a query string parameter."
}
}
]
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
{
"@type": "SoftwareApplication",
"@id": "https://algoseek.com/#datasets-api",
"name": "Algoseek Datasets API",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "All",
"url": "https://algoseek.com/docs",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#website"
},
"softwareVersion": "v1",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"description": "Free tier available; paid plans for production volume."
}
},
"{{ breadcrumb }}",
{
"@type": "TechArticle",
"@id": "{{ canonical_url }}#article",
"url": "{{ canonical_url }}",
"name": "{{ page.h1 }}",
"headline": "{{ page.meta_title }}",
"description": "{{ page.meta_description }}",
"inLanguage": "en-US",
"isPartOf": {
"@id": "https://algoseek.com/#datasets-api"
},
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"author": {
"@id": "https://algoseek.com/#organization"
},
"dateModified": "{{ page.updated_at | iso_date }}",
"datePublished": "{{ page.created_at | iso_date }}",
"proficiencyLevel": "{{ page.proficiency | default('Beginner') }}"
},
"{# EMIT FAQPage ONLY when detector finds ≥2 Q-A pairs. Detector rules ALL must pass: (a) H2 or H3 textContent ends with '?'; (b) heading text length ≥10 chars (filter trivial '?'); (c) next non-empty <p> after the heading anchor has text ≥30 chars; (d) at least 2 such pairs on the page. If detector fails, DO NOT emit FAQPage — Google demotes fake markup. #}",
{
"@type": "FAQPage",
"@id": "{{ canonical_url }}#faq",
"mainEntity": "{{ faq_items | for each emit: {'@type':'Question', name:<heading_text>, acceptedAnswer:{'@type':'Answer', text:<paragraph_text>}} }}"
}
]
}
</script>
Implementation notes
- `FAQPage` is the big SEO win — Triggers rich FAQ result in SERP for queries 'how to authenticate algoseek api'.
- Detector heuristic — Look for h2/h3 whose textContent ends with '?'. The first <p> or text node after that anchor is the answer. Min 2 Q-A pairs to qualify.
- `proficiencyLevel` — Schema.org TechArticle-specific. Use Beginner/Intermediate/Expert. Helps Google rank correct skill tier for the searcher.
- Do NOT publish FAQPage if there's no real Q&A — Google demotes pages that fake FAQ markup.
3. TUTORIAL_INDEX — `/docs/rest-api/tutorials`
Hub listing all tutorials — CollectionPage + ItemList
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
{
"@type": "SoftwareApplication",
"@id": "https://algoseek.com/#datasets-api",
"name": "Algoseek Datasets API",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "All",
"url": "https://algoseek.com/docs",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#website"
},
"softwareVersion": "v1",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"description": "Free tier available; paid plans for production volume."
}
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Algoseek",
"item": "https://algoseek.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Documentation",
"item": "https://algoseek.com/docs"
},
{
"@type": "ListItem",
"position": 3,
"name": "Tutorials",
"item": "https://algoseek.com/docs/rest-api/tutorials"
}
]
},
{
"@type": "CollectionPage",
"@id": "https://algoseek.com/docs/rest-api/tutorials#collection",
"url": "https://algoseek.com/docs/rest-api/tutorials",
"name": "algoseek Datasets API Tutorials",
"description": "Step-by-step guides covering filtering, pagination, reference data, and access rules.",
"inLanguage": "en-US",
"isPartOf": {
"@id": "https://algoseek.com/#datasets-api"
},
"mainEntity": {
"@type": "ItemList",
"numberOfItems": 8,
"itemListOrder": "Ascending",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"item": {
"@type": "Thing",
"name": "Fetch your first market data",
"url": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data"
}
},
{
"@type": "ListItem",
"position": 2,
"item": {
"@type": "Thing",
"name": "Working with reference data and SecID",
"url": "https://algoseek.com/docs/rest-api/tutorial/working-with-reference-data-and-secid"
}
},
{
"@type": "ListItem",
"position": 3,
"item": {
"@type": "Thing",
"name": "Pagination and query parameters",
"url": "https://algoseek.com/docs/rest-api/tutorial/pagination-and-query-parameters"
}
},
{
"@type": "ListItem",
"position": 4,
"item": {
"@type": "Thing",
"name": "Data filtering",
"url": "https://algoseek.com/docs/rest-api/tutorial/data-filtering"
}
},
{
"@type": "ListItem",
"position": 5,
"item": {
"@type": "Thing",
"name": "Advanced filtering",
"url": "https://algoseek.com/docs/rest-api/tutorial/advanced-filtering"
}
},
{
"@type": "ListItem",
"position": 6,
"item": {
"@type": "Thing",
"name": "Customizing data output",
"url": "https://algoseek.com/docs/rest-api/tutorial/customizing-data-output"
}
},
{
"@type": "ListItem",
"position": 7,
"item": {
"@type": "Thing",
"name": "Metadata",
"url": "https://algoseek.com/docs/rest-api/tutorial/metadata"
}
},
{
"@type": "ListItem",
"position": 8,
"item": {
"@type": "Thing",
"name": "Access rule",
"url": "https://algoseek.com/docs/rest-api/tutorial/access-rule"
}
}
]
}
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
{
"@type": "SoftwareApplication",
"@id": "https://algoseek.com/#datasets-api",
"name": "Algoseek Datasets API",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "All",
"url": "https://algoseek.com/docs",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#website"
},
"softwareVersion": "v1",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"description": "Free tier available; paid plans for production volume."
}
},
"{{ breadcrumb }}",
{
"@type": "CollectionPage",
"@id": "{{ canonical_url }}#collection",
"url": "{{ canonical_url }}",
"name": "{{ page.h1 }}",
"description": "{{ page.meta_description }}",
"inLanguage": "en-US",
"isPartOf": {
"@id": "https://algoseek.com/#datasets-api"
},
"mainEntity": "{{ IF children | length >= 1 then emit: {'@type':'ItemList', numberOfItems:children|length, itemListOrder:'Ascending', itemListElement:[for each child emit {'@type':'ListItem', position, item:{'@type':'Thing', name, url}}]} ELSE OMIT mainEntity (do NOT emit empty list) }}"
}
]
}
</script>
Implementation notes
- Why `CollectionPage` not `TechArticle` — Hub page collecting tutorials — `CollectionPage` signals to Google that this is a list, not the content itself.
- `itemListOrder: Ascending` — Required for proper ItemList ranking (otherwise unordered).
- Per-item `ListItem` with `position` — Same pattern as breadcrumbs — Google preserves order in AI Overviews.
4. TUTORIAL — `/docs/rest-api/tutorial/{slug}` ⭐
Step-by-step tutorial — HowTo with HowToStep + totalTime + tool + supply. Eligible for HowTo carousel rich result.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
{
"@type": "SoftwareApplication",
"@id": "https://algoseek.com/#datasets-api",
"name": "Algoseek Datasets API",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "All",
"url": "https://algoseek.com/docs",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#website"
},
"softwareVersion": "v1",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"description": "Free tier available; paid plans for production volume."
}
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Algoseek",
"item": "https://algoseek.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Documentation",
"item": "https://algoseek.com/docs"
},
{
"@type": "ListItem",
"position": 3,
"name": "Tutorials",
"item": "https://algoseek.com/docs/rest-api/tutorials"
},
{
"@type": "ListItem",
"position": 4,
"name": "Fetch your first market data",
"item": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data"
}
]
},
{
"@type": "HowTo",
"@id": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data#howto",
"url": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data",
"name": "Fetch your first market data from algoseek",
"description": "Make your first authenticated request to the algoseek Datasets API and retrieve US Equity tick data for a single symbol.",
"inLanguage": "en-US",
"totalTime": "PT5M",
"estimatedCost": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "USD"
},
"tool": [
{
"@type": "HowToTool",
"name": "Python 3.10+"
},
{
"@type": "HowToTool",
"name": "requests library"
},
{
"@type": "HowToTool",
"name": "curl (alternative)"
}
],
"supply": [
{
"@type": "HowToSupply",
"name": "Algoseek API key",
"url": "https://algoseek.com/docs/rest-api/authentication"
}
],
"step": [
{
"@type": "HowToStep",
"position": 1,
"name": "Authenticate",
"url": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data#authenticate",
"image": "https://algoseek.com/static/img/algoseek_logo.svg",
"text": "Set X-API-KEY header with your algoseek API key."
},
{
"@type": "HowToStep",
"position": 2,
"name": "Choose dataset & ticker",
"url": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data#choose-dataset",
"image": "https://algoseek.com/static/img/algoseek_logo.svg",
"text": "Pick us-equity-tick and ticker AAPL."
},
{
"@type": "HowToStep",
"position": 3,
"name": "Send the request",
"url": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data#send-request",
"image": "https://algoseek.com/static/img/algoseek_logo.svg",
"text": "GET https://api.algoseek.com/v1/data/us-equity/eq-taq-1-min/AAPL?date=2025-09-15"
},
{
"@type": "HowToStep",
"position": 4,
"name": "Parse the response",
"url": "https://algoseek.com/docs/rest-api/tutorial/fetch-your-first-market-data#parse",
"image": "https://algoseek.com/static/img/algoseek_logo.svg",
"text": "Response is JSON with rows of OHLCV bars; iterate over `data[]` to extract timestamp + price + volume."
}
],
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"author": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#datasets-api"
}
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
{
"@type": "SoftwareApplication",
"@id": "https://algoseek.com/#datasets-api",
"name": "Algoseek Datasets API",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "All",
"url": "https://algoseek.com/docs",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#website"
},
"softwareVersion": "v1",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"description": "Free tier available; paid plans for production volume."
}
},
"{{ breadcrumb }}",
{
"@type": "HowTo",
"@id": "{{ canonical_url }}#howto",
"url": "{{ canonical_url }}",
"name": "{{ page.h1 }}",
"description": "{{ page.meta_description }}",
"inLanguage": "en-US",
"totalTime": "{{ page.total_time | iso_duration (estimate from total step count × 1-2 min; format ISO-8601 like 'PT5M', 'PT1H') }}",
"estimatedCost": {
"@type": "MonetaryAmount",
"value": "0",
"currency": "USD"
},
"tool": "{{ extract from code-block languages on page: for each unique class='language-X' emit {'@type':'HowToTool', name: language_label (python→'Python 3.10+', bash→'curl', http→'curl')} }}",
"supply": "{{ for each link in page body pointing to prerequisite docs (e.g. /authentication, /api-headers) emit {'@type':'HowToSupply', name, url} }}",
"step": "{{ For EACH H2 on the page emit a HowToStep with: - position: H2 ordinal (1-based); - name: H2 heading text (e.g. 'Send the request'); - url: canonical_url + '#' + h2.id (anchor MUST exist; if no anchor — omit url field, do NOT ship dead link); - image: ONLY include if a real screenshot or illustration URL exists in the section. DO NOT fall back to site logo — fake image signal poisons the rich-result. If no image, omit the field; HowTo will lose carousel eligibility but JSON-LD stays honest. Re-add image later when real assets ship; - text: the FIRST PARAGRAPH content under the H2 (strip HTML tags, ~50-300 chars). DO NOT duplicate the heading text — Google needs descriptive prose. }}",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"author": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#datasets-api"
},
"dateModified": "{{ page.updated_at | iso_date }}"
},
"{# OPTIONAL: per code-block, emit one SoftwareSourceCode node referenced via mentions[] on the HowTo. See ENDPOINT section for full SoftwareSourceCode example. #}"
]
}
</script>
Implementation notes
- 🥇 Biggest rich-result win — HowTo carousel renders in SERP for tutorial-shaped queries. Direct screen-real-estate above non-HowTo competitors.
- `step.image` is REQUIRED for carousel — Without `image` Google does NOT render the HowTo as a carousel. Use real per-step screenshots if you have them. Site-default logo as a last-resort fallback technically works but reduces card quality.
- `step.text` ≠ `step.name` — DO NOT set step.text = step.name. Extract the first <p> AFTER the H2 in DOM order. If a step has only code and no prose, take the preceding paragraph or a code-comment summary.
- `step[].url` MUST resolve — Each step.url should anchor to a real `#section-id` on the page. If anchor doesn't exist, drop step.url entirely (don't ship dead links).
- `totalTime` in ISO-8601 — `PT5M` = 5 minutes. `PT1H30M` = 1.5 hours. Estimate: 1-2 min/H2.
- `tool` from code-block languages — Detect `<pre><code class='language-X'>` on page. python→'Python 3.10+', bash/sh→'curl', javascript/typescript→'Node.js', http→'curl'.
- `supply` from prerequisite links — Find <a href> inside the article that point to other /docs/ pages describing prereqs (e.g. /authentication, /api-headers, /console).
- Avoid — Don't use `Course` or `LearningResource` — those need accreditation context.
5. REFERENCE_INDEX — `/docs/rest-api/reference`
Hub of asset-group reference pages — APIReference + ItemList
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
{
"@type": "SoftwareApplication",
"@id": "https://algoseek.com/#datasets-api",
"name": "Algoseek Datasets API",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "All",
"url": "https://algoseek.com/docs",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#website"
},
"softwareVersion": "v1",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"description": "Free tier available; paid plans for production volume."
}
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Algoseek",
"item": "https://algoseek.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Documentation",
"item": "https://algoseek.com/docs"
},
{
"@type": "ListItem",
"position": 3,
"name": "API Reference",
"item": "https://algoseek.com/docs/rest-api/reference"
}
]
},
{
"@type": "APIReference",
"@id": "https://algoseek.com/docs/rest-api/reference#api",
"url": "https://algoseek.com/docs/rest-api/reference",
"name": "algoseek Datasets API Reference",
"description": "Full reference for all algoseek REST endpoints covering equities, options, futures, and reference data.",
"inLanguage": "en-US",
"programmingModel": "REST",
"targetPlatform": "Algoseek Datasets API v1",
"documentationType": "API Reference",
"isPartOf": {
"@id": "https://algoseek.com/#datasets-api"
},
"mainEntity": {
"@type": "ItemList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"item": {
"@type": "Thing",
"name": "Equity",
"url": "https://algoseek.com/docs/rest-api/reference/equity"
}
},
{
"@type": "ListItem",
"position": 2,
"item": {
"@type": "Thing",
"name": "Equity Options",
"url": "https://algoseek.com/docs/rest-api/reference/equity-options"
}
},
{
"@type": "ListItem",
"position": 3,
"item": {
"@type": "Thing",
"name": "Equity Reference",
"url": "https://algoseek.com/docs/rest-api/reference/equity-reference"
}
},
{
"@type": "ListItem",
"position": 4,
"item": {
"@type": "Thing",
"name": "Futures",
"url": "https://algoseek.com/docs/rest-api/reference/futures"
}
},
{
"@type": "ListItem",
"position": 5,
"item": {
"@type": "Thing",
"name": "Options Reference",
"url": "https://algoseek.com/docs/rest-api/reference/options-reference"
}
},
{
"@type": "ListItem",
"position": 6,
"item": {
"@type": "Thing",
"name": "Metadata",
"url": "https://algoseek.com/docs/rest-api/reference/metadata"
}
},
{
"@type": "ListItem",
"position": 7,
"item": {
"@type": "Thing",
"name": "Identity & Access",
"url": "https://algoseek.com/docs/rest-api/reference/identity-access"
}
}
]
}
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
{
"@type": "SoftwareApplication",
"@id": "https://algoseek.com/#datasets-api",
"name": "Algoseek Datasets API",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "All",
"url": "https://algoseek.com/docs",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#website"
},
"softwareVersion": "v1",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"description": "Free tier available; paid plans for production volume."
}
},
"{{ breadcrumb }}",
{
"@type": "APIReference",
"@id": "{{ canonical_url }}#api",
"url": "{{ canonical_url }}",
"name": "{{ page.h1 }}",
"description": "{{ page.meta_description }}",
"inLanguage": "en-US",
"programmingModel": "REST",
"targetPlatform": "{{ api_name | default('Algoseek Datasets API v1') }}",
"documentationType": "API Reference",
"isPartOf": {
"@id": "https://algoseek.com/#datasets-api"
},
"mainEntity": "{{ IF asset_groups | length >= 1 then emit: {'@type':'ItemList', itemListElement:[for each group emit {'@type':'ListItem', position, item:{'@type':'Thing', name:group.h1, url:group.canonical}}]} ELSE OMIT mainEntity entirely }}"
}
]
}
</script>
Implementation notes
- Why `APIReference` here — This IS documentation OF an API — `APIReference` is the exact schema.org type for that. Don't use WebAPI on the index page — WebAPI is the API itself, not its docs.
- `programmingModel` + `targetPlatform` — schema.org-specific to APIReference. Strong AI-citation signal.
- ItemList uses Thing wrapper — Same `item:{Thing, name, url}` pattern as Landing/Collection — keeps ListItem clean for Google's list parser.
6. REFERENCE_GROUP — `/docs/rest-api/reference/{asset}` ⭐
Asset-group hub (equity, futures, options, ...) — CollectionPage + hasPart + standalone Dataset node
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
{
"@type": "SoftwareApplication",
"@id": "https://algoseek.com/#datasets-api",
"name": "Algoseek Datasets API",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "All",
"url": "https://algoseek.com/docs",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#website"
},
"softwareVersion": "v1",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"description": "Free tier available; paid plans for production volume."
}
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Algoseek",
"item": "https://algoseek.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Documentation",
"item": "https://algoseek.com/docs"
},
{
"@type": "ListItem",
"position": 3,
"name": "API Reference",
"item": "https://algoseek.com/docs/rest-api/reference"
},
{
"@type": "ListItem",
"position": 4,
"name": "Equity",
"item": "https://algoseek.com/docs/rest-api/reference/equity"
}
]
},
{
"@type": "CollectionPage",
"@id": "https://algoseek.com/docs/rest-api/reference/equity#collection",
"url": "https://algoseek.com/docs/rest-api/reference/equity",
"name": "US Equity Market Data API endpoints",
"description": "Tick, Intraday, and Daily endpoints for US Equity TAQ data.",
"inLanguage": "en-US",
"isPartOf": {
"@id": "https://algoseek.com/#datasets-api"
},
"hasPart": [
{
"@type": "WebPage",
"@id": "https://algoseek.com/docs/rest-api/reference/us-equity-tick",
"url": "https://algoseek.com/docs/rest-api/reference/us-equity-tick",
"name": "Equity Tick"
},
{
"@type": "WebPage",
"@id": "https://algoseek.com/docs/rest-api/reference/us-equity-intraday-bar",
"url": "https://algoseek.com/docs/rest-api/reference/us-equity-intraday-bar",
"name": "Equity Intraday Bar"
},
{
"@type": "WebPage",
"@id": "https://algoseek.com/docs/rest-api/reference/us-equity-daily",
"url": "https://algoseek.com/docs/rest-api/reference/us-equity-daily",
"name": "Equity Daily"
}
]
},
{
"@type": "Dataset",
"@id": "https://algoseek.com/datasets/us-equity-taq#dataset",
"name": "Algoseek US Equity TAQ",
"description": "Trade and Quote data for all US-listed equities, consolidated NBBO from SIP feeds. Available as tick, 1-minute bars, and daily bars.",
"url": "https://algoseek.com/datasets/us-equity-taq",
"creator": {
"@id": "https://algoseek.com/#organization"
},
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"license": "https://algoseek.com/docs/license",
"keywords": [
"TAQ",
"tick data",
"NBBO",
"US equities",
"SIP feeds",
"market microstructure"
],
"spatialCoverage": {
"@type": "Place",
"name": "United States",
"geo": {
"@type": "GeoShape",
"addressCountry": "US"
}
},
"temporalCoverage": "2007-01-01/..",
"isAccessibleForFree": false,
"variableMeasured": [
{
"@type": "PropertyValue",
"name": "Price"
},
{
"@type": "PropertyValue",
"name": "Volume"
},
{
"@type": "PropertyValue",
"name": "Bid/Ask"
},
{
"@type": "PropertyValue",
"name": "Exchange code"
}
],
"distribution": [
{
"@type": "DataDownload",
"name": "JSON via REST API",
"encodingFormat": "application/json",
"contentUrl": "https://api.algoseek.com/v1/data/us-equity/eq-taq/",
"requires": "API key (X-API-KEY header)"
},
{
"@type": "DataDownload",
"name": "Free sample (1 day)",
"encodingFormat": "text/csv",
"contentUrl": "https://algoseek.com/sample-data/us-equity-tick-sample.csv"
}
]
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
{
"@type": "SoftwareApplication",
"@id": "https://algoseek.com/#datasets-api",
"name": "Algoseek Datasets API",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "All",
"url": "https://algoseek.com/docs",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#website"
},
"softwareVersion": "v1",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"description": "Free tier available; paid plans for production volume."
}
},
"{{ breadcrumb }}",
{
"@type": "CollectionPage",
"@id": "{{ canonical_url }}#collection",
"url": "{{ canonical_url }}",
"name": "{{ page.h1 }}",
"description": "{{ page.meta_description }}",
"inLanguage": "en-US",
"isPartOf": {
"@id": "https://algoseek.com/#datasets-api"
},
"hasPart": "{{ IF child_endpoints | length >= 1 then emit: [for each endpoint emit {'@type':'WebPage', '@id':endpoint.canonical, url:endpoint.canonical, name:endpoint.h1}] ELSE OMIT hasPart (do NOT emit empty array) }}"
},
"{# REQUIRED if this group corresponds to one logical dataset. Skip the Dataset node only if the group is purely navigational (e.g. Metadata, Identity & Access). #}",
{
"@type": "Dataset",
"@id": "{{ dataset_url }}#dataset {# stable URL, e.g. /datasets/us-equity-taq — referenced by every endpoint in this group via @id #}",
"name": "{{ dataset.name }} {# e.g. 'Algoseek US Equity TAQ' #}",
"description": "{{ dataset.description }} {# 1-2 sentences #}",
"url": "{{ dataset_url }}",
"creator": {
"@id": "https://algoseek.com/#organization"
},
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"license": "https://algoseek.com/docs/license",
"keywords": "{{ dataset.keywords | join with comma (e.g. 'TAQ, tick data, NBBO, US equities') }}",
"spatialCoverage": "{{ Place node — e.g. {'@type':'Place', name:'United States', geo:{'@type':'GeoShape', addressCountry:'US'}} }}",
"temporalCoverage": "{{ ISO-8601 interval — start/end or start/.. for ongoing, e.g. '2007-01-01/..' }}",
"isAccessibleForFree": "{{ true if free tier covers core access, else false. Pair with a free sample distribution below. }}",
"variableMeasured": "{{ for each top-level field in API response (Price, Volume, Bid, Ask, ...) emit {'@type':'PropertyValue', name} }}",
"distribution": "{{ REQUIRED 2+ items: (1) primary DataDownload with encodingFormat='application/json', contentUrl=base API endpoint, requires='API key (X-API-KEY)'; (2) free sample DataDownload with contentUrl=public CSV/JSON preview Googlebot can fetch — without this, Dataset Search rejects the dataset. }}"
}
]
}
</script>
Implementation notes
- 🔄 Tiamat-recommended change — Use `CollectionPage + hasPart` here, NOT `APIReference + ItemList`. Group page is a hub of children, not the documentation OF an API.
- 🥇 Google Dataset Search opens here — Each reference_group maps to ONE Dataset (e.g. equity → US Equity TAQ). 59 endpoint pages do NOT each get their own Dataset — they all reference the parent group's Dataset via `@id`.
- Free sample distribution is required — Google Dataset Search will not index a Dataset where Googlebot can't fetch any distribution. Include a free preview CSV/JSON URL.
- `isAccessibleForFree: false` — Honest signal. Combine with free-sample distribution.
- `variableMeasured` — Helps Dataset Search match queries like 'NBBO tick data with exchange code'.
7. ENDPOINT — `/docs/rest-api/reference/{endpoint-slug}` ⭐
Per-endpoint detail page (auto-generated from OpenAPI) — WebAPI + ConsumeAction with EntryPoint + SoftwareSourceCode per example
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
{
"@type": "SoftwareApplication",
"@id": "https://algoseek.com/#datasets-api",
"name": "Algoseek Datasets API",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "All",
"url": "https://algoseek.com/docs",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#website"
},
"softwareVersion": "v1",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"description": "Free tier available; paid plans for production volume."
}
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Algoseek",
"item": "https://algoseek.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Documentation",
"item": "https://algoseek.com/docs"
},
{
"@type": "ListItem",
"position": 3,
"name": "API Reference",
"item": "https://algoseek.com/docs/rest-api/reference"
},
{
"@type": "ListItem",
"position": 4,
"name": "Equity Tick",
"item": "https://algoseek.com/docs/rest-api/reference/us-equity-tick"
}
]
},
{
"@type": "WebAPI",
"@id": "https://algoseek.com/docs/rest-api/reference/us-equity-tick#webapi",
"url": "https://algoseek.com/docs/rest-api/reference/us-equity-tick",
"name": "US Equity Tick endpoint",
"description": "Retrieve historical tick-level TAQ data for a single US-listed equity on a specific date.",
"inLanguage": "en-US",
"documentation": "https://algoseek.com/docs/rest-api/reference/us-equity-tick",
"termsOfService": "https://algoseek.com/docs/terms-of-service",
"isPartOf": {
"@id": "https://algoseek.com/#datasets-api"
},
"provider": {
"@id": "https://algoseek.com/#organization"
},
"potentialAction": {
"@type": "ConsumeAction",
"name": "Fetch tick data for a ticker",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://api.algoseek.com/v1/data/us-equity/eq-taq/{ticker}?date={iso_date}",
"httpMethod": "GET",
"encodingType": "application/json",
"contentType": "application/json",
"actionPlatform": [
"https://schema.org/DesktopWebPlatform",
"https://schema.org/MobileWebPlatform"
]
},
"actionAccessibilityRequirement": {
"@type": "ActionAccessSpecification",
"category": "registered API key required",
"requiresSubscription": true
},
"object": {
"@id": "https://algoseek.com/datasets/us-equity-taq#dataset"
}
}
},
{
"@type": "Dataset",
"@id": "https://algoseek.com/datasets/us-equity-taq#dataset",
"name": "Algoseek US Equity TAQ",
"url": "https://algoseek.com/datasets/us-equity-taq"
},
{
"@type": "SoftwareSourceCode",
"@id": "https://algoseek.com/docs/rest-api/reference/us-equity-tick#example-python",
"name": "Python example: fetch AAPL tick data",
"programmingLanguage": "Python",
"codeRepository": "https://github.com/algoseekgit/api-examples",
"codeSampleType": "code snippet",
"text": "import requests\nr = requests.get(\n 'https://api.algoseek.com/v1/data/us-equity/eq-taq/AAPL',\n params={'date': '2025-09-15'},\n headers={'X-API-KEY': 'YOUR_KEY'},\n)\nfor row in r.json()['data']:\n print(row['timestamp'], row['price'], row['volume'])\n"
},
{
"@type": "SoftwareSourceCode",
"@id": "https://algoseek.com/docs/rest-api/reference/us-equity-tick#example-curl",
"name": "cURL example: fetch AAPL tick data",
"programmingLanguage": "Bash",
"codeSampleType": "code snippet",
"text": "curl -H 'X-API-KEY: YOUR_KEY' \\\n 'https://api.algoseek.com/v1/data/us-equity/eq-taq/AAPL?date=2025-09-15'\n"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
{
"@type": "SoftwareApplication",
"@id": "https://algoseek.com/#datasets-api",
"name": "Algoseek Datasets API",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "All",
"url": "https://algoseek.com/docs",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"isPartOf": {
"@id": "https://algoseek.com/#website"
},
"softwareVersion": "v1",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD",
"description": "Free tier available; paid plans for production volume."
}
},
"{{ breadcrumb }}",
{
"@type": "WebAPI",
"@id": "{{ canonical_url }}#webapi",
"url": "{{ canonical_url }}",
"name": "{{ endpoint.h1 }}",
"description": "{{ endpoint.meta_description }}",
"inLanguage": "en-US",
"documentation": "{{ canonical_url }}",
"termsOfService": "https://algoseek.com/docs/terms-of-service",
"isPartOf": {
"@id": "https://algoseek.com/#datasets-api"
},
"provider": {
"@id": "https://algoseek.com/#organization"
},
"potentialAction": {
"@type": "ConsumeAction",
"name": "{{ endpoint.action_name {# e.g. 'Fetch tick data for a ticker'. Build from h1 + verb: 'Fetch <h1>' #} }}",
"target": {
"@type": "EntryPoint",
"urlTemplate": "{{ endpoint.url_template {# from OpenAPI: 'https://api.algoseek.com/' + path with {param} placeholders, e.g. '/v1/data/us-equity/eq-taq/{ticker}?date={iso_date}' #} }}",
"httpMethod": "{{ endpoint.http_method | default('GET') }}",
"encodingType": "application/json",
"contentType": "application/json",
"actionPlatform": [
"https://schema.org/DesktopWebPlatform",
"https://schema.org/MobileWebPlatform"
]
},
"actionAccessibilityRequirement": {
"@type": "ActionAccessSpecification",
"category": "registered API key required",
"requiresSubscription": true
},
"object": "{{ {'@id': parent_dataset_url + '#dataset'} {# REQUIRED — link to the Dataset node defined on the parent group's /datasets/<id>/ page #} }}"
}
},
"{# Reference parent Dataset by @id ONLY — full Dataset node lives on /datasets/<id>/. This is a 'stub' for graph linkage. #}",
{
"@type": "Dataset",
"@id": "{{ parent_dataset_url }}#dataset",
"name": "{{ parent_dataset.name }}",
"url": "{{ parent_dataset_url }}"
},
"{# Emit ONE SoftwareSourceCode node per <pre><code class='language-X'> on the page. Walk DOM, group by language, give each a stable @id like #example-python / #example-curl. #}",
{
"@type": "SoftwareSourceCode",
"@id": "{{ canonical_url + '#example-' + code_block.lang {# unique per (page, language) #} }}",
"name": "{{ <human-readable title> {# e.g. 'Python example: fetch AAPL tick data'. Build from language + endpoint h1 #} }}",
"programmingLanguage": "{{ language label {# Python / Bash / JavaScript / TypeScript / Go / Ruby / Java #} }}",
"codeSampleType": "code snippet",
"text": "{{ code_block.code {# raw textContent of the <pre><code>, preserve newlines and indentation, no HTML #} }}",
"isPartOf": "{{ {'@id': canonical_url + '#webapi'} {# link back to the WebAPI node #} }}"
}
]
}
</script>
Implementation notes
- 🔄 Switched from `APIReference` to `WebAPI` — On endpoint detail pages, `WebAPI` is more accurate than `APIReference`. `APIReference` describes documentation OF an API; `WebAPI` describes the endpoint itself. Detail pages are the endpoint.
- `potentialAction.ConsumeAction` — Captures the actual GET/POST operation, with URL template and required auth. NOT a `SearchAction` — that's for search functionality only.
- `actionAccessibilityRequirement` — Tiamat-flagged backfire risk: ConsumeAction without auth context can be treated as fake action. ActionAccessSpecification fixes this.
- Dataset is referenced by `@id`, not duplicated — Full Dataset node lives on `/datasets/<id>/`. Endpoint page just references it via `@id`. Prevents conflicting Dataset signals across 59 endpoint pages.
- `SoftwareSourceCode` per code block — Each Python/curl/Node example becomes an indexable entity. Google can surface them in 'code samples' rich results for queries like 'algoseek python fetch tick'.
- Required attribute on EntryPoint — `urlTemplate` with `{variables}` is preferred over plain `url` — lets Google model the parameter space.
8. LEGAL — `/docs/{license,terms-of-service}`
License / ToS pages — DigitalDocument
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
{
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "Algoseek",
"item": "https://algoseek.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "Documentation",
"item": "https://algoseek.com/docs"
},
{
"@type": "ListItem",
"position": 3,
"name": "License",
"item": "https://algoseek.com/docs/license"
}
]
},
{
"@type": "DigitalDocument",
"@id": "https://algoseek.com/docs/license#document",
"url": "https://algoseek.com/docs/license",
"name": "Algoseek Datasets API License",
"description": "License terms governing access to and use of the Algoseek Datasets API and underlying data.",
"inLanguage": "en-US",
"datePublished": "2025-09-01",
"dateModified": "2026-05-27",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"author": {
"@id": "https://algoseek.com/#organization"
},
"documentLicenseStatus": "Active"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "https://algoseek.com/#website",
"name": "Algoseek",
"url": "https://algoseek.com",
"publisher": {
"@id": "https://algoseek.com/#organization"
}
},
{
"@type": "Organization",
"@id": "https://algoseek.com/#organization",
"name": "Algoseek",
"legalName": "Algoseek LLC",
"url": "https://algoseek.com",
"logo": {
"@type": "ImageObject",
"url": "https://algoseek.com/assets/design-system/logo.png",
"width": 250,
"height": 60
},
"sameAs": [
"https://twitter.com/Algoseek",
"https://www.linkedin.com/company/algoseek",
"https://github.com/algoseekgit"
]
},
"{{ breadcrumb }}",
{
"@type": "DigitalDocument",
"@id": "{{ canonical_url }}#document",
"url": "{{ canonical_url }}",
"name": "{{ page.h1 }}",
"description": "{{ page.meta_description }}",
"inLanguage": "en-US",
"datePublished": "{{ page.created_at | iso_date }}",
"dateModified": "{{ page.updated_at | iso_date }}",
"publisher": {
"@id": "https://algoseek.com/#organization"
},
"author": {
"@id": "https://algoseek.com/#organization"
},
"documentLicenseStatus": "Active"
}
]
}
</script>
Implementation notes
- `DigitalDocument` over generic `WebPage` — Explicit document semantics — works for ToS, license, EULA, privacy.
- Date pair is mandatory — `datePublished` + `dateModified` for compliance / freshness signal. Use git lastmod or DB updated_at; format ISO-8601 date.
- `documentLicenseStatus` — schema.org-specific. Use Active / Withdrawn / Draft.
- DO NOT set `license` to self URL — Tiamat caught this — a license document referencing itself as its own license is a circular reference. Omit `license` field entirely on legal pages (it's only needed on Datasets/Articles).