FAQ Question Answer Extractor avatar

FAQ Question Answer Extractor

Pricing

from $6.50 / 1,000 faq source page scanneds

Go to Apify Store
FAQ Question Answer Extractor

FAQ Question Answer Extractor

Extract FAQ question-answer pairs from visible HTML and FAQPage schema, reconcile duplicates, and flag schema/visible mismatches

Pricing

from $6.50 / 1,000 faq source page scanneds

Rating

0.0

(0)

Developer

junipr

junipr

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Extract question-and-answer pairs from visible page content and FAQPage JSON-LD, reconcile matching questions, classify question intent, and identify empty or inconsistent answers.

The Actor is useful for FAQ inventories, structured-data audits, content research, support-content migrations, and duplicate-question cleanup. Every answer comes from accepted page evidence. Missing answers stay null; they are never completed from general knowledge.

Supported evidence

Visible extraction recognizes:

  • <details> and <summary> pairs;
  • FAQ item blocks with question and answer classes;
  • definition lists using <dt> and <dd>;
  • question headings followed by a paragraph.

Structured extraction recognizes valid JSON-LD objects with @type: FAQPage and mainEntity questions containing accepted answers. When a normalized question exists in both sources, the Actor compares the cleaned answer text and records whether it matches exactly.

The Actor also classifies common intent patterns such as cost, process, reason, location, timing, eligibility/confirmation, and general definition questions.

Input

Supply public FAQ pages in pageUrls, additional public pages in startUrls, bounded XML sitemaps in sitemapUrls, or captured records in htmlInputs.

FieldPurposeDefault / cap
pageUrlsPublic pages containing FAQsempty
startUrlsAdditional public FAQ pagesempty
sitemapUrlsPublic XML sitemapsempty
htmlInputsCaptured records with sourceUrl and HTMLempty
includeFaqSchemaExtract FAQPage JSON-LDtrue
compareVisibleAndSchemaCompare answers for matching questionstrue
dedupeQuestionsCollapse repeated questions across pagestrue
questionFiltersOptional case-insensitive phrases a question must containempty array
maxFaqPairsPerPageMaximum retained question pairs per page50, maximum 500
maxPagesMaximum fetched pages1 by default, maximum 25
allowedDomainsOptional hostname allowlistempty
includeEvidenceKeep evidence excerpts in rowstrue
includeRawSnapshotsStore accepted raw HTMLfalse
maxChargeUsdStop before the next event exceeds this amount15 USD maximum

Example:

{
"pageUrls": [
"https://product.example/pricing-faq",
"https://product.example/account-faq"
],
"includeFaqSchema": true,
"compareVisibleAndSchema": true,
"dedupeQuestions": true,
"questionFilters": ["billing", "cancel", "trial"],
"maxFaqPairsPerPage": 100,
"maxPages": 2,
"allowedDomains": ["product.example"],
"maxChargeUsd": 3
}

Question filters are applied after normalization. A question is retained when it contains at least one configured phrase. The Store default has no page source and returns a nonempty source_required diagnostic.

Dataset output

Each dataset item includes:

  • questionText and answerText from the accepted page;
  • answerLength, with zero used for an observed question whose answer is empty;
  • faqSource, such as visible_details, visible_definition_list, faq_schema, or visible_and_schema;
  • schemaVisibleMatch, which is true or false when comparison is enabled and null when it is not applicable;
  • duplicateQuestionGroup, a stable bounded identifier for repeated normalized questions;
  • questionIntent, such as cost, process, or eligibility_or_confirmation;
  • issueCode, severity, evidenceSnippet, and recommendation for normal, mismatch, empty-answer, blocked, and missing-source rows;
  • sourceUrl, canonicalUrl, httpStatus, and scannedAt for provenance.

When the same question appears visibly and in structured data, the visible answer is retained as the primary dataset answer while the match flag reports the comparison. An empty visible answer is preserved as null and marked high severity. A nonempty disagreement is marked medium severity.

With cross-page deduplication enabled, the first row is kept and receives a duplicate group identifier when the question appears again. Disable dedupeQuestions if every occurrence must remain in the dataset.

Reports

With includeReport: true, the Actor stores:

  • a Markdown summary;
  • a complete CSV export;
  • JSON issue rows;
  • bounded evidence excerpts;
  • run metadata with source counts, issue codes, pricing mode, and consumed fields.

Raw accepted HTML is written only when includeRawSnapshots is explicitly enabled.

Pay-per-event pricing

EventPrice (USD)When charged
actor-start0.0100after successful startup
faq-source-page-scanned0.0065once for each accepted FAQ source unit
faq-pair-extracted0.00295before each paid question-answer row
faq-mismatch-emitted0.00295before each paid mismatch, empty-answer, or diagnostic row
audit-report-generated0.0800before report artifacts are stored

Apify platform usage pass-through is off. The Actor checks maxChargeUsd and the complete charge result before every output. It exits before writing a row or report when the charge cannot be accepted.

Safety and interpretation

Only public HTTP and HTTPS URLs are fetched. Loopback and private IPv4 targets are rejected, an optional hostname allowlist can narrow access, and page counts and request timeouts are bounded. Discovered links are not crawled. The Actor does not bypass authentication or human-verification controls.

Structured-data equality is a cleaned-text comparison, not a semantic fact check. Two differently worded answers may be equivalent, while two identical answers may still be inaccurate. Validate policy, legal, medical, financial, or account-support content with the appropriate owner before publishing changes.