Skip to main content

Markdownee Apify Actor

Use the Actor for hosted crawls, schedules, and Apify storage. Start with one page, inspect its output, then expand the scope.

Start a run

Paste this into the Actor's Input tab and select Start, or save it as input.json for the commands below:

{
  "startUrls": [{ "url": "https://en.wikipedia.org/wiki/Web_scraping" }],
  "crawlerType": "cheerio",
  "maxRequestsPerCrawl": 1,
  "save": ["markdown-kvs"]
}

Inspect the successful run's Dataset record and its Markdown file in the Key-value store. Add a link selector, URL filters, and limits to follow links; globs alone discover nothing. The Input tab is the generated reference for all fields.

For command-line or API use, set APIFY_TOKEN to your Apify API token in the execution environment. The CLI route requires Node.js/npm; the API route requires curl.

npx --package=apify-cli apify call markdownee/crawler \
  --input-file input.json --output-dataset

This waits for the run and prints its default dataset. To start a run through the API:

curl --fail --request POST \
  "https://api.apify.com/v2/acts/markdownee~crawler/runs" \
  --header "Authorization: Bearer $APIFY_TOKEN" \
  --header "Content-Type: application/json" \
  --data-binary @input.json

The API returns run metadata immediately; use its run and store IDs to inspect status and retrieve results. See the API tab. Keep tokens out of shared files and URLs.

Input reference

A blank default means the schema has no fixed value. Settings apply only to their supported crawler or storage surface.

Crawl settings

ParameterTypeDefaultDescription
startUrlsarrayrequiredStarting URL objects.
crawlerTypeenum"playwright-adaptive"playwright-adaptive, playwright-firefox, playwright-chromium, or HTTP-only cheerio.
renderingTypeDetectionRationumber0Adaptive HTTP/browser sampling, 0–1. At 0, every page uses browser rendering.
markdownDiscoveryenum"off"Origin-published source: off, alternate (advertised links), negotiate (also Accept), or probe (also a .md sibling). Applies to all formats.
maxRequestsPerCrawlintegerRequest limit; omitted means unrestricted.
maxCrawlDepthintegerLink-depth limit; omitted means unrestricted; 0 means start URLs only.
initialConcurrencyintegerStarting parallel requests; omitted uses Crawlee's selection.
maxConcurrencyinteger3Parallel-request limit; page size and browser work also affect memory.
maxRequestRetriesinteger3Retry count for failed requests.
maxResultsPerCrawlintegerResult limit; omitted means unrestricted.

Crawl filtering

ParameterTypeDefaultDescription
globsarray[]Include patterns as { "glob": "..." } objects.
excludearray[]Exclude patterns as { "glob": "..." } objects.
selectorstring""CSS selector for links to follow; empty means no link following.
keepUrlFragmentbooleanfalseTreat different URL fragments as different pages.
useSitemapsbooleanfalseEnqueue URLs from the start origins' sitemap.xml.
deduplicationenum"standard"minimal (URL), standard (plus canonical URL), or aggressive (plus content hash).
respectRobotsTxtFilebooleanfalseHonor robots.txt rules.

Content extraction

ParameterTypeDefaultDescription
modeenum"balanced"precision, balanced, recall, or keep for whole-document cleanup.
imageHandlingenum"exclude"exclude, alt-text (text only), resolved-url (remote reference), or save (download/transform into KVS). Separate from format routing.
maxImageEdgeinteger1568Saved-image long-edge limit; 0 is uncapped; no upscaling. Applies only to image save.
rasterizeSvgbooleantrueSave SVG as PNG, or cleaned SVG when false. Applies only to image save.
linkHandlingenum"include"include or exclude, retaining anchor text.
tableHandlingenum"include"include or exclude, removing the whole subtree and its text.
commentHandlingenum"include"Include or exclude detected user-comment sections, not HTML comment markup.
languageCodestring""Filter conflicting declared languages; empty disables filtering.
outputLayoutenum"minimal"minimal: body/fragment; standard: ordinary metadata/front matter and complete HTML; enhanced: extended metadata/crawl context.

Output destinations

ParameterTypeDefaultDescription
savearray["markdown-kvs"]{txt,markdown,html,minified-html,original}-{dataset,kvs} tokens. Repeat a format for both destinations. Prefer KVS for large HTML bodies.
datasetNamestringNamed results dataset; empty uses the run default.
keyValueStoreNamestringNamed content store; empty uses the run default.
requestQueueNamestringNamed request queue; empty uses the run default.
storeSkippedUrlsbooleanfalseRecord skipped URLs and their reasons.

Browser settings

ParameterTypeDefaultDescription
headlessbooleantrueRun browsers without a visible window.
waitUntilenum"load"Navigation event: load, domcontentloaded, networkidle, or commit.
navigationTimeoutSecsinteger60Navigation limit in seconds.
waitForDynamicContentSecsinteger10Wait for network idle up to this seconds limit; 0 disables it. Also sets selector-wait timeouts.
waitForSelectorstring""Required CSS selector; absence fails the request.
softWaitForSelectorstring""Optional CSS selector; absence does not fail the request.
blockMediabooleantrueBlock images, stylesheets, fonts, PDFs, and ZIPs on Chromium.
ignoreCorsAndCspbooleanfalseDisable browser CORS/CSP restrictions.
closeCookieModalsbooleantrueAttempt consent handling.
maxScrollHeightinteger5000Scroll limit in pixels; 0 disables scrolling.
userAgentstring""Custom User-Agent.
ignoreHttpsErrorsbooleanfalseSkip HTTPS certificate verification.

Proxy

ParameterTypeDefaultDescription
proxyConfigurationobjectApify Proxy settings; use the Console proxy editor.
proxyRotationenum"recommended"recommended, per-request, or until-failure.
sessionPoolNamestringPersist and share session cookies/IP state across runs.
maxSessionRotationsinteger10Rotations per request after blocking; separate from retries; 0 disables rotation.

Cookies & headers

ParameterTypeDefaultDescription
initialCookiesarrayInitial cookies, scoped to matching requests; marked secret in Actor input.
customHttpHeadersobjectCustom HTTP headers.

Read outcomes and content

Dataset records use success, failed, or, when enabled, skipped status. Failures include errors and retry counts; skips include skipReason. Each record holds the request URL, metadata, and available crawl context such as loaded URL, timestamp, HTTP status, and depth.

A *-dataset route includes content inline; *-kvs stores a file and references its key and available public URL. Content nodes carry MD5 hashes and UTF-8 byte counts. Select both destinations to keep both representations; large HTML bodies are better kept in KVS. The Output tab defines the record schema.

Format selectors use minified-html; records use minifiedHtml. The original node describes captured input, and an original-* route stores its bytes. That capture may already reflect browser rendering or consent handling.

When discovery accepts origin-published Markdown, markdownSource records the URL, mechanism, and whether the saved Markdown is verbatim. Its original HTML is then derived from that representation. Discovery depends on crawler capabilities and request budgets; rejected representations fall back to HTML. A Markdown-only response has no page HTML from which to follow links.

See CLI Help and npm library Help for local execution, or Python Help for the native library.

Updated: September 25, 2026