Content Gap By SERP Pages Auditor
Pricing
from $11.50 / 1,000 owned page analyzeds
Content Gap By SERP Pages Auditor
Compare owned pages against top-ranking SERP pages to identify missing subtopics, headings, FAQs, entities, media signals, and content-format gaps
Compare an owned page with supplied competitor-page evidence for the same search query. The Actor extracts visible topics, question headings, content formats, and structured-data entity types, then emits only the signals present on competitors and absent from the owned page.
This is useful for SEO content refreshes, editorial briefs, landing-page research, and repeatable competitor inventories. It does not claim that a missing signal is automatically worth adding. Each row includes the source URLs, the compared evidence, a transparent frequency, and a bounded priority score so an editor can make the final decision.
What the Actor checks
- meaningful words from titles, meta descriptions, and visible headings;
- visible questions in headings, summaries, definition terms, and buttons;
- observable formats such as lists, tables, images, video or embeds, and FAQs;
- JSON-LD
@typevalues that can be parsed from supplied pages; - the number of accepted competitor pages that contain each missing signal;
- whether every query has at least one owned page and one competitor page with usable content.
No gap is invented when a source is empty, blocked, or missing. Access-denied and human-verification pages produce a diagnostic row instead of a content recommendation.
Input
Use one of two evidence paths:
ownedUrlsandcompetitorUrlsfetch public pages. AddtargetQueriesin corresponding order when needed.serpResultsaccepts structured query records withownedUrl,ownedHtml, and acompetitorsarray. This path is ideal when another search workflow already captured page HTML or snippets.
htmlInputs can also carry records with sourceUrl, html, role (owned or competitor), and query.
| Field | Purpose | Default / cap |
|---|---|---|
targetQueries | Query labels used to group comparisons | one bounded default query; maxQueries 10 |
ownedUrls | Public owned-page URLs | empty; maxOwnedPages 5 per query |
competitorUrls | Public competitor-page URLs | empty; maxCompetitorPages 10 per query |
serpResults | Query-linked owned and competitor evidence | empty array |
gapDimensions | topics, questions, formats, and/or entities | all four |
minCompetitorFrequency | Minimum accepted competitors showing a signal | 1, maximum 20 |
maxSectionsPerPage | Maximum gap rows emitted per query | 25, maximum 100 |
allowedDomains | Optional hostname allowlist for URL fetches | empty |
maxPages | Maximum public pages fetched in one run | 1 by default, maximum 25 |
includeEvidence | Keep evidence excerpts in dataset rows | true |
includeRawSnapshots | Store accepted raw HTML snapshots | false |
maxChargeUsd | Stop before the next event would exceed this amount | 35 USD maximum |
includeReport | Write report artifacts | true |
Example using captured SERP evidence:
{"serpResults": [{"query": "project management software","ownedUrl": "https://owned.example/project-management","ownedHtml": "<html><title>Project management</title><h1>Task planning</h1></html>","competitors": [{"url": "https://competitor.example/workload","html": "<html><title>Workload management</title><h1>Capacity planning</h1><h2>How do teams allocate resources?</h2></html>"}]}],"targetQueries": ["project management software"],"gapDimensions": ["topics", "questions"],"maxSectionsPerPage": 20,"maxChargeUsd": 5}
The Store default intentionally contains no page evidence. It finishes quickly with a nonempty sources_required diagnostic that explains what to provide.
Dataset output
Every dataset item has the same schema. Important fields include:
targetQuery,ownedUrl, andcompetitorUrlidentify the comparison;gapTypeistopic,question,format,entity, ornone;missingTopicis the exact normalized signal;competitorEvidenceandownedEvidencepreserve bounded source excerpts;priorityScorecombines competitor frequency with the signal class;issueCode,severity,evidenceSnippet, andrecommendationexplain the decision;sourceUrl,canonicalUrl,httpStatus, andscannedAtpreserve provenance.
When no configured gap meets the threshold, the Actor can emit a none baseline. Missing or blocked evidence produces a diagnostic with null gap fields.
Reports
When includeReport is enabled, key-value storage receives:
- a Markdown summary;
- a CSV containing every dataset row;
- a JSON list of issue rows;
- bounded evidence excerpts;
- run metadata with counts, consumed inputs, strategy identifier, and pricing mode.
Raw page snapshots are separate and opt-in. This keeps ordinary runs compact and avoids retaining more source content than necessary.
Pay-per-event pricing
| Event | Price (USD) | When charged |
|---|---|---|
actor-start | 0.035 | after the run starts successfully |
owned-page-analyzed | 0.0115 | once for each source/query unit processed |
competitor-source-processed | 0.0115 | before emitting a row backed by accepted competitor evidence |
content-gap-emitted | 0.0115 | before each paid gap dataset item |
executive-report-generated | 0.4000 | before report artifacts are written |
Apify platform usage pass-through is off. The Actor checks maxChargeUsd before every event and stops cleanly before writing an output whose charge cannot be accepted.
Responsible use and limits
Only public HTTP and HTTPS URLs are accepted. Loopback and private IPv4 targets are rejected, an optional domain allowlist can narrow fetches, and general discovered-link crawling is disabled. Sitemap URLs remain subject to the same page cap. The Actor does not bypass authentication, paywalls, robots controls, or human-verification challenges.
The result is an evidence inventory, not a promise of search ranking or editorial performance. Review recommendations for relevance, accuracy, copyright, and brand requirements before publishing content changes.