Q&A Schema Extractor
Extract Question/Answer pairs from JSON-LD schema markup.
#about
Recursive JSON traversal for Question and FAQPage @type detection.
Extracts from name field, answers from acceptedAnswer or suggestedAnswer objects.
BeautifulSoup for live URL fetching.
Handles nested dict/list structures.
Multiple fallback fields for robust extraction.
Streamlit app
- Platform
- Browser-based (no installation required)
- Input
- URLs for live fetching, orRaw JSON-LD schema paste, orCrawl CSV with schema column (Screaming Frog)
- Output
- Question-answer pairs with source URL, extracted from nested FAQPage/Question schema structures.
- Category
- Technical SEO
Use cases
- Auditing FAQ schema implementation
- Extracting competitor FAQ content
- Content inventory of Q&A pages
- Validating schema after migrations
#features
- Recursive JSON-LD traversal
- @type detection: Question, FAQPage
- Multiple answer fields: acceptedAnswer, suggestedAnswer
- Live URL fetching with BeautifulSoup
- Screaming Frog crawl data compatible
#how-to-use
- Choose input method: URL, JSON paste, or file upload
- For files, map the schema column
- Run extraction with recursive parsing
- Review extracted Q&A pairs
- Download CSV/Excel with source URLs
#faq
- What does bulk mode expect in the schema column?
- Raw JSON-LD, one parseable blob per cell, for example a Screaming Frog custom extraction of script type application/ld+json. Cells that fail JSON parsing are skipped silently, so truncated cells or several JSON blobs concatenated into one cell produce no rows rather than an error. If the output looks thin, spot check whether your cells are valid standalone JSON.
- Does it only read JSON-LD?
- Yes. URL mode parses script tags with type application/ld+json only; FAQ or Q&A markup implemented in microdata or RDFa is not extracted.
- Why does a URL with visible FAQ schema return nothing?
- URL mode fetches pages with plain HTTP requests and no JavaScript rendering, so schema injected client side, for instance via a tag manager, is not in the HTML the tool sees. Crawl the site with a JavaScript rendering crawler, extract the JSON-LD into a column and use bulk mode instead.
- How are multiple or missing answers handled?
- If acceptedAnswer or suggestedAnswer is an array, only the first answer's text is captured. Questions with no readable answer are still extracted with an empty answer cell, so blank answers in the export usually reflect the markup, not a failed fetch.
/contact
Want me to run this for you? I run this tool as a managed service, or build something custom around your data. You get the insights without touching the code.