FAQPage schema for web extraction
A FAQPage schema captures a support or help page as structured data: the page title, its URL, a count of how many entries it holds, and a questions array where each item pairs the question text with its answer. Teams extract this to harvest scattered help-center content into a uniform Q&A dataset, feed verified answers into a support assistant or RAG index, audit answers across product versions, or compare how competitors phrase the same policy. Naming each field gives you typed records you can search, render, and validate, instead of a wall of accordion HTML you still have to pull apart by hand. FAQ pages are a strong fit for describing fields rather than writing CSS selectors, because no two help centers mark up their questions the same way. One site wraps each entry in a details and summary pair, another uses headings followed by paragraphs, a third renders the whole accordion with JavaScript only after the page loads. You describe what a question and an answer are once, and because every request runs through a real headless browser, the model reads the rendered Q&A pairs regardless of the underlying markup. When a page lists no answer for a stub question, that answer comes back as null instead of an invented sentence, so an empty value means the page genuinely had none rather than the extraction quietly guessing. The count field is derived from the questions actually found, which gives you a cheap integrity check: if count and the array length ever disagree in your pipeline, you know to look before you trust the record.
Fields in a FAQPage schema
The fields teams most often extract for a faqpage, what type each one is, and whether it is usually present.
| Field | Type | Required | Notes |
|---|---|---|---|
| questions | { question: string, answer: string }[] | yes | The list of FAQ entries, each an object pairing the question text with its answer. Returning this typed as an array of objects preserves the question-to-answer mapping so you can index, render, or embed each pair directly, instead of getting one run-together block of text you must re-split and re-align yourself. |
| question | string | yes | Inside each questions item, the question exactly as worded on the page, such as How do I reset my password. Captured verbatim so search and deduplication match real user phrasing, and so the field stays a reliable key when you join the same FAQ across product versions. |
| answer | string | optional | Inside each questions item, the full answer text for that question. Returned as null when a question is listed with no answer yet, so a null tells you the page truly left it blank rather than the model inventing a plausible-sounding reply to fill the gap. |
| pageTitle | string | optional | The title of the FAQ or help page itself, such as Billing FAQ or Frequently Asked Questions. Useful as a human-readable label when you store many FAQ pages together, and it returns null on pages that carry no distinct title rather than borrowing one from the first question. |
| url | string | optional | The canonical URL of the FAQ page, returned as a typed string. Keeping the source URL on the record lets you trace each Q&A pair back to its origin, refresh it later, and cite it in a support assistant so answers stay verifiable instead of anonymous. |
| count | number | optional | The number of question-and-answer entries found on the page, returned as a number so you can sort, threshold, or sum across many pages without parsing text. It acts as an integrity check against the questions array length, and returns null only when no FAQ section is present at all. |
| category | string | optional | An optional grouping label the page assigns to its questions, such as Billing, Shipping, or Account. Returned as a string when the page organizes its FAQ into sections, and null when it presents a single flat list, letting you bucket answers without guessing a category that was never stated. |
The schema
Copy this and send it with any URL.
{
"questions": "{ question: string, answer: string }[]",
"pageTitle": "string",
"url": "string",
"count": "number",
"category": "string"
} Example output
Validated JSON back, matching the schema.
{
"questions": [
{
"question": "How do I reset my password?",
"answer": "Open the sign-in page, choose Forgot password, and enter the email on your account. We send a reset link that stays valid for 30 minutes."
},
{
"question": "Can I change my plan at any time?",
"answer": "Yes. Upgrades take effect immediately and we prorate the difference; downgrades apply at the start of your next billing cycle."
},
{
"question": "Do you offer refunds?",
"answer": "We refund unused time on annual plans within 14 days of purchase. Monthly plans are not prorated on cancellation."
},
{
"question": "Where can I download my invoices?",
"answer": null
}
],
"pageTitle": "Billing and Account FAQ",
"url": "https://en.wikipedia.org/wiki/FAQ",
"count": 4,
"category": "Billing"
} Try this faqpage schema against a real page in the live demo, or read the docs to use it via the API.