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
| Parameter | Type | Default | Description |
|---|---|---|---|
startUrls | array | required | Starting URL objects. |
crawlerType | enum | "playwright-adaptive" | playwright-adaptive, playwright-firefox, playwright-chromium, or HTTP-only cheerio. |
renderingTypeDetectionRatio | number | 0 | Adaptive HTTP/browser sampling, 0–1. At 0, every page uses browser rendering. |
markdownDiscovery | enum | "off" | Origin-published source: off, alternate (advertised links), negotiate (also Accept), or probe (also a .md sibling). Applies to all formats. |
maxRequestsPerCrawl | integer | Request limit; omitted means unrestricted. | |
maxCrawlDepth | integer | Link-depth limit; omitted means unrestricted; 0 means start URLs only. | |
initialConcurrency | integer | Starting parallel requests; omitted uses Crawlee's selection. | |
maxConcurrency | integer | 3 | Parallel-request limit; page size and browser work also affect memory. |
maxRequestRetries | integer | 3 | Retry count for failed requests. |
maxResultsPerCrawl | integer | Result limit; omitted means unrestricted. |
Crawl filtering
| Parameter | Type | Default | Description |
|---|---|---|---|
globs | array | [] | Include patterns as { "glob": "..." } objects. |
exclude | array | [] | Exclude patterns as { "glob": "..." } objects. |
selector | string | "" | CSS selector for links to follow; empty means no link following. |
keepUrlFragment | boolean | false | Treat different URL fragments as different pages. |
useSitemaps | boolean | false | Enqueue URLs from the start origins' sitemap.xml. |
deduplication | enum | "standard" | minimal (URL), standard (plus canonical URL), or aggressive (plus content hash). |
respectRobotsTxtFile | boolean | false | Honor robots.txt rules. |
Content extraction
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | enum | "balanced" | precision, balanced, recall, or keep for whole-document cleanup. |
imageHandling | enum | "exclude" | exclude, alt-text (text only), resolved-url (remote reference), or save (download/transform into KVS). Separate from format routing. |
maxImageEdge | integer | 1568 | Saved-image long-edge limit; 0 is uncapped; no upscaling. Applies only to image save. |
rasterizeSvg | boolean | true | Save SVG as PNG, or cleaned SVG when false. Applies only to image save. |
linkHandling | enum | "include" | include or exclude, retaining anchor text. |
tableHandling | enum | "include" | include or exclude, removing the whole subtree and its text. |
commentHandling | enum | "include" | Include or exclude detected user-comment sections, not HTML comment markup. |
languageCode | string | "" | Filter conflicting declared languages; empty disables filtering. |
outputLayout | enum | "minimal" | minimal: body/fragment; standard: ordinary metadata/front matter and complete HTML; enhanced: extended metadata/crawl context. |
Output destinations
| Parameter | Type | Default | Description |
|---|---|---|---|
save | array | ["markdown-kvs"] | {txt,markdown,html,minified-html,original}-{dataset,kvs} tokens. Repeat a format for both destinations. Prefer KVS for large HTML bodies. |
datasetName | string | Named results dataset; empty uses the run default. | |
keyValueStoreName | string | Named content store; empty uses the run default. | |
requestQueueName | string | Named request queue; empty uses the run default. | |
storeSkippedUrls | boolean | false | Record skipped URLs and their reasons. |
Browser settings
| Parameter | Type | Default | Description |
|---|---|---|---|
headless | boolean | true | Run browsers without a visible window. |
waitUntil | enum | "load" | Navigation event: load, domcontentloaded, networkidle, or commit. |
navigationTimeoutSecs | integer | 60 | Navigation limit in seconds. |
waitForDynamicContentSecs | integer | 10 | Wait for network idle up to this seconds limit; 0 disables it. Also sets selector-wait timeouts. |
waitForSelector | string | "" | Required CSS selector; absence fails the request. |
softWaitForSelector | string | "" | Optional CSS selector; absence does not fail the request. |
blockMedia | boolean | true | Block images, stylesheets, fonts, PDFs, and ZIPs on Chromium. |
ignoreCorsAndCsp | boolean | false | Disable browser CORS/CSP restrictions. |
closeCookieModals | boolean | true | Attempt consent handling. |
maxScrollHeight | integer | 5000 | Scroll limit in pixels; 0 disables scrolling. |
userAgent | string | "" | Custom User-Agent. |
ignoreHttpsErrors | boolean | false | Skip HTTPS certificate verification. |
Proxy
| Parameter | Type | Default | Description |
|---|---|---|---|
proxyConfiguration | object | Apify Proxy settings; use the Console proxy editor. | |
proxyRotation | enum | "recommended" | recommended, per-request, or until-failure. |
sessionPoolName | string | Persist and share session cookies/IP state across runs. | |
maxSessionRotations | integer | 10 | Rotations per request after blocking; separate from retries; 0 disables rotation. |
Cookies & headers
| Parameter | Type | Default | Description |
|---|---|---|---|
initialCookies | array | Initial cookies, scoped to matching requests; marked secret in Actor input. | |
customHttpHeaders | object | Custom 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