{ "openapi": "3.1.0", "info": { "title": "Inkpluck API (Article Text Extractor: URL to Markdown)", "version": "1.0.0", "summary": "💰 $1 per 1,000 articles; pages that fail, are blocked, paywalled or too thin are free.", "description": "💰 $1 per 1,000 articles; pages that fail, are blocked, paywalled or too thin are free. Article extractor for LLMs and RAG: URLs or RSS feeds in; clean text and Markdown, title, authors, publish date, language, top image and paywall flag out. Monitor mode skips URLs already extracted.\n\nRuns the Inkpluck Actor (`cybermax/article-extract`) on Apify with the caller's own Apify API token and returns its dataset. Pricing (pay per event, billed by Apify):\n- Article extracted: $0.001\n\nPublisher: CyberMax. Catalog: https://cybermax-tools-cybermax.static.hf.space/market/catalog.json", "contact": { "name": "CyberMax", "url": "https://apify.com/cybermax/article-extract" }, "x-logo": { "url": "https://cybermax-tools-cybermax.static.hf.space/favicon.ico" } }, "x-cybermax-referral": { "program": "CyberMax affiliate and referral program", "status": "open", "ratePct": 30, "appliesTo": "Digital products sold through CyberMax's own Stripe checkout (store downloads, app Pro plans, API plans, bundles, data briefs).", "basis": "net amount CyberMax receives for the order (after payment fees, refunds and chargebacks)", "recurring": "the first 12 months of a subscription; one-time orders once", "attributionWindowDays": 60, "passRef": { "queryParam": "ref", "stripeParam": "client_reference_id", "stripeValue": "aff_", "example": "https://buy.stripe.com/?client_reference_id=aff_" }, "payouts": "Paid manually by CyberMax once a month for eligible sales whose 14-day refund window has closed (owner approval 10 Oct 2026).", "terms": "https://cybermaxtools.com/affiliates/", "details": "https://cybermaxtools.com/.well-known/referral.json", "note": "Runs of this tool are billed by Apify on Apify's checkout, so they are not covered by the CyberMax referral program; it covers CyberMax Stripe checkout sales (store, API plans, bundles)." }, "externalDocs": { "description": "Apify Store page", "url": "https://apify.com/cybermax/article-extract" }, "servers": [ { "url": "https://api.apify.com", "description": "Apify API" } ], "security": [ { "apifyToken": [] } ], "tags": [ { "name": "Inkpluck", "description": "💰 $1 per 1,000 articles; pages that fail, are blocked, paywalled or too thin are free." } ], "paths": { "/v2/acts/cybermax~article-extract/run-sync-get-dataset-items": { "post": { "operationId": "runInkpluckSync", "tags": [ "Inkpluck" ], "summary": "Inkpluck: run and return results", "description": "💰 $1 per 1,000 articles; pages that fail, are blocked, paywalled or too thin are free. Waits for the run to finish (up to 300 s) and returns the output records.", "parameters": [ { "name": "timeout", "in": "query", "required": false, "description": "Run timeout in seconds (max 300 for synchronous runs).", "schema": { "type": "integer", "minimum": 1, "maximum": 300 } }, { "name": "clean", "in": "query", "required": false, "description": "Omit empty records and hidden fields.", "schema": { "type": "boolean", "default": true } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Input" }, "example": { "urls": [ "https://techcrunch.com/2026/09/23/meta-introduces-camera-free-ai-glasses/", "https://blog.cloudflare.com/vary-support/" ] } } } }, "responses": { "201": { "description": "Run finished; body is the list of output records.", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/OutputRecord" } }, "example": [ { "url": "https://arxiv.org/pdf/1706.03762", "finalUrl": "https://arxiv.org/pdf/1706.03762", "ok": false, "error": "not an HTML page (application/pdf)", "ms": 442, "extractedAt": "2026-09-23T23:44:36.144Z", "images": [] } ] } } }, "400": { "description": "Invalid input.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApifyError" } } } }, "401": { "description": "Missing or invalid Apify token.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApifyError" } } } }, "402": { "description": "Apify account has no credit left for this run.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApifyError" } } } }, "408": { "description": "The run did not finish within the synchronous timeout; start it asynchronously instead.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApifyError" } } } }, "429": { "description": "Rate limited by Apify.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApifyError" } } } } } } }, "/v2/acts/cybermax~article-extract/runs": { "post": { "operationId": "startInkpluckRun", "tags": [ "Inkpluck" ], "summary": "Inkpluck: start an asynchronous run", "description": "Starts a run and returns immediately. Poll GET https://api.apify.com/v2/actor-runs/{runId} and read items from GET https://api.apify.com/v2/datasets/{defaultDatasetId}/items.", "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Input" } } } }, "responses": { "201": { "description": "Run started.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RunStarted" } } } }, "400": { "description": "Invalid input.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApifyError" } } } }, "401": { "description": "Missing or invalid Apify token.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApifyError" } } } }, "402": { "description": "Apify account has no credit left for this run.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApifyError" } } } }, "429": { "description": "Rate limited by Apify.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApifyError" } } } } } } } }, "components": { "securitySchemes": { "apifyToken": { "type": "http", "scheme": "bearer", "description": "Your Apify API token (https://console.apify.com/settings/integrations). Runs are billed to your Apify account." } }, "schemas": { "Input": { "type": "object", "properties": { "urls": { "type": "array", "title": "Article URLs", "description": "News articles, blog posts or docs pages to extract. One URL per line; the scheme is optional (\"example.com/post\" works). Duplicates are skipped.", "examples": [ [ "https://techcrunch.com/2026/09/23/meta-introduces-camera-free-ai-glasses/", "https://blog.cloudflare.com/vary-support/" ] ], "items": { "type": "string" } }, "feedUrls": { "type": "array", "title": "RSS/Atom feeds to watch", "description": "Feed URLs (e.g. https://techcrunch.com/feed/). Inkpluck reads each feed and extracts its newest articles. Combine with \"Only new articles\" and an Apify Schedule to get each new article once, as Markdown, every day.", "items": { "type": "string" } }, "maxArticlesPerFeed": { "type": "integer", "title": "Articles per feed", "description": "Newest items taken from each feed.", "default": 20, "minimum": 1, "maximum": 200 }, "onlyNew": { "type": "boolean", "title": "Only new articles (monitor mode)", "description": "Skip URLs this monitor already extracted in earlier runs (skips are free and produce no record). Memory is kept in a named key-value store per monitor name in your account.", "default": false }, "monitorName": { "type": "string", "title": "Monitor name", "description": "Separate memories for separate watch lists, e.g. \"ai-news\" or \"competitor-blogs\". Letters, digits and dashes.", "default": "default" }, "htmlDocuments": { "type": "array", "title": "Raw HTML documents (optional)", "description": "Already have the HTML? Pass [{\"url\": \"https://site.com/post\", \"html\": \"...\"}] and Inkpluck extracts it without fetching. The URL is used to resolve relative links and dates.", "items": {} }, "onlyArticles": { "type": "boolean", "title": "Only charge for real articles", "description": "Home pages, section pages (/news, /tech) and link lists are returned as free failures instead of extracted pages. Turn on when feeding crawled link lists; leave off to extract any page's main text.", "default": false }, "outputMarkdown": { "type": "boolean", "title": "Include Markdown", "description": "Add a `markdown` field (headings, lists, links, images and tables kept) next to the plain `text`. Ideal for LLM/RAG pipelines.", "default": true }, "includeHtml": { "type": "boolean", "title": "Include cleaned article HTML", "description": "Add an `html` field with the article body only (no navigation, ads or footer).", "default": false }, "newspaper3kFields": { "type": "boolean", "title": "Add newspaper3k field names", "description": "Also output newspaper3k's attribute names (publish_date, top_image, movies, meta_lang, meta_description, meta_keywords, canonical_link, source_url) so existing newspaper3k code keeps working.", "default": false }, "minWords": { "type": "integer", "title": "Minimum words for a successful extraction", "description": "Pages with fewer words of article text are reported as failures (free).", "default": 50, "minimum": 1, "maximum": 5000 }, "maxConcurrency": { "type": "integer", "title": "Pages in parallel", "description": "How many pages are fetched and extracted at the same time.", "default": 10, "minimum": 1, "maximum": 50 }, "timeoutSecs": { "type": "integer", "title": "Timeout per page (seconds)", "description": "Give up on a page after this many seconds (one automatic retry on network errors and 5xx).", "default": 20, "minimum": 5, "maximum": 120 }, "retryBlockedWithProxy": { "type": "boolean", "title": "Retry blocked pages through Apify Proxy", "description": "When a site answers 403/429/503 to a direct request, try once more through Apify Proxy (uses your account's proxy).", "default": true }, "proxyConfiguration": { "type": "object", "title": "Proxy (optional)", "description": "Send every request through this proxy (e.g. residential for sites that block datacenters). Leave empty for direct requests with the automatic retry above.", "default": { "useApifyProxy": false } }, "startUrls": { "type": "array", "title": "Start URLs (compatibility)", "description": "Same as Article URLs, in the [{\"url\": ...}] format other Actors use.", "items": { "type": "object", "properties": { "url": { "type": "string", "format": "uri" } } } } }, "title": "Inkpluck article extractor", "additionalProperties": false }, "OutputRecord": { "type": "object", "properties": { "url": { "type": "string", "description": "The URL as given in the input" }, "finalUrl": { "type": [ "string", "null" ], "description": "URL after redirects" }, "ok": { "type": "boolean", "description": "true when article text was extracted (charged); false = free failure, see error" }, "title": { "type": [ "string", "null" ] }, "authors": { "type": "array", "items": { "type": "string" } }, "publishDate": { "type": [ "string", "null" ], "description": "ISO 8601" }, "modifiedDate": { "type": [ "string", "null" ], "description": "ISO 8601" }, "siteName": { "type": [ "string", "null" ] }, "language": { "type": [ "string", "null" ], "description": "ISO 639-1 code, e.g. en" }, "description": { "type": [ "string", "null" ] }, "section": { "type": [ "string", "null" ] }, "tags": { "type": "array", "items": { "type": "string" } }, "topImage": { "type": [ "string", "null" ], "description": "Image" }, "images": { "type": "array", "items": { "type": "string" } }, "videos": { "type": "array", "items": { "type": "string" } }, "text": { "type": "string", "description": "Clean article text, paragraphs separated by blank lines" }, "markdown": { "type": [ "string", "null" ] }, "html": { "type": [ "string", "null" ] }, "wordCount": { "type": "integer" }, "readingTimeMinutes": { "type": "integer" }, "looksLikeArticle": { "type": "boolean" }, "paywalled": { "type": "boolean" }, "canonicalUrl": { "type": [ "string", "null" ] }, "httpStatus": { "type": [ "integer", "null" ] }, "fetchedVia": { "type": "string", "description": "direct, proxy, proxy-retry or html-input" }, "ms": { "type": "integer" }, "error": { "type": "string" }, "extractedAt": { "type": "string" } } }, "RunStarted": { "type": "object", "properties": { "data": { "type": "object", "properties": { "id": { "type": "string" }, "status": { "type": "string" }, "defaultDatasetId": { "type": "string" } } } } }, "ApifyError": { "type": "object", "properties": { "error": { "type": "object", "properties": { "type": { "type": "string" }, "message": { "type": "string" } } } } } } } }