web-content-extractor avatar

web-content-extractor

Pricing

from $2.00 / 1,000 record scrapeds

Go to Apify Store
web-content-extractor

web-content-extractor

HTTP-first web scraper without proxy by default. Returns clean article text, SEO metadata, and headings. Apify Proxy and Playwright used only as fallback. No-code friendly JSON output for Make, n8n, and Zapier

Pricing

from $2.00 / 1,000 record scrapeds

Rating

5.0

(1)

Developer

Morph Coder

Morph Coder

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

0.21 hours

Issues response

an hour ago

Last modified

Share

Web Content Extractor

Apify Actor for no-code friendly web content extraction. Fetches pages without proxy by default (cheap HTTP), uses Apify Proxy and Playwright only as fallback.

Features

  • HTTP-first — direct Cheerio fetch without proxy (no proxy cost on most pages)
  • 4-step fallback — Cheerio → Cheerio+Proxy → Playwright → Playwright+Proxy
  • Clean content — Mozilla Readability removes nav, banners, and noise
  • SEO metadata — title, meta description, OG tags, canonical, all headings (h1–h6)
  • No-code output — flat JSON fields for Make, n8n, Zapier
  • Social URL blocking — Facebook, YouTube, etc. return blocked_social without scraping

Input

FieldDefaultDescription
urlsRequired. List of page URLs
outputFormatjsonjson | text | markdown
useProxyFallbacktrueRetry with Apify Proxy on HTTP errors / blocks
usePlaywrightFallbacktrueRetry thin/JS pages with headless Chrome
minContentLength200Min text length before Playwright fallback
countryUSProxy country (fallback steps only)
proxyTypeRESIDENTIALRESIDENTIAL or DATACENTER
batchSize50URLs per processing wave
maxUrls1000Hard cap per run
extractExternalLinksfalseOne URL per external domain

Example input

{
"urls": [
"https://example.com/article",
"https://blog.example.org/post"
],
"outputFormat": "json"
}

Output

One dataset item per URL.

Success example (outputFormat: json)

{
"url": "https://example.com/article",
"success": true,
"status": "success_static",
"method": "cheerio",
"usedProxy": false,
"title": "Article title",
"metaDescription": "SEO description from meta tag",
"ogTitle": "Article title",
"ogDescription": "SEO description",
"canonical": "https://example.com/article",
"headings": [
{ "level": 1, "text": "Main heading" },
{ "level": 2, "text": "Section" }
],
"fullText": "Clean plain text of the article...",
"content": "Clean plain text of the article...",
"markdown": "# Main heading\n\nClean plain text...",
"wordCount": 842,
"httpStatus": 200,
"fetchedAt": "2026-06-24T12:00:00.000Z",
"billable": true
}

outputFormat behavior

Formatcontent fieldOther fields
jsonPlain text (fullText)All SEO fields + markdown
textPlain texttitle, success only (SEO fields null)
markdownMarkdownAll SEO fields

Status values

StatusMeaning
success_staticCheerio HTTP fetch succeeded
success_renderedPlaywright rendering succeeded
blocked_socialSocial URL — not scraped
failed_fetchHTTP or network error
failed_dynamicContent too short / not extractable
failed_timeoutRequest timed out

Fallback chain

URLs → Cheerio (no proxy)
[403/block/timeout]Cheerio (Apify Proxy)
[thin content]Playwright (no proxy)
[still failing]Playwright (Apify Proxy)

Proxy is initialized lazily — only when a fallback step needs it.

No-code integration

Make (Integromat)

  1. Add Apify module → Run Actorweb-content-extractor
  2. Pass urls array
  3. Map output fields directly:
    • content → text field in Google Docs / Notion
    • metaDescription → SEO field
    • headings → iterator for outline generation
  4. Filter: success = true

n8n

  1. Apify node → Run Actor
  2. Use JSON output — no markdown parsing needed
  3. Expression: {{ $json.content }}, {{ $json.metaDescription }}
  4. IF node: {{ $json.success }} equals true

Zapier

  1. Apify action → Run Actor
  2. Filter Zap: only continue if success is true
  3. Map content and title to next step (e.g. OpenAI, Airtable)

Local development

npm install
npm run build
npm run dev

Set input via Apify CLI or storage/key_value_stores/default/INPUT.json:

{
"urls": ["https://example.com"]
}

Docker

Built on apify/actor-node-playwright-chrome for Playwright fallback support.

$apify push

Billing

Pay-per-event: one scraped-url charge per successfully extracted URL. Proxy and Playwright fallback steps do not add extra charges.