News Site Article Archive
Pricing
from $2.55 / 1,000 article rows
News Site Article Archive
Name news sites and a past date range and get full article text, dates, and authors as rows. Walks sitemaps and the Internet Archive index across years. No code, no AI, no login. Paywalled pages are left out.
Pricing
from $2.55 / 1,000 article rows
Rating
0.0
(0)
Developer
Mamba Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Features
Share
Name the news sites and a past date range, and get every article the actor can reach from that range as a row: full text, published date, title, author, and section. It walks a site's own sitemaps and month pages, then the Internet Archive capture index for years those no longer reach. No code, no AI, no browser, no login. You pay per article returned, and Mamba Labs pays the platform costs.
Features
- Walks back through a site's history. Give a date range of days or years. The site's sitemaps come first, then for each month, oldest first, the site's own month pages (such as
/2016/01/) or, where it has none, the Internet Archive capture index. - The page decides the date. An article is kept only when the published date on the page is in your range.
date_sourcesays where the date came from. - Full text, not just links. Paragraphs from the article body, without menus, related stories, newsletter boxes, or comments.
- Pages gone from the site. A page the site answers with 404, 410, 500, 502, or 504 is read from an Internet Archive copy, marked
read_fromarchive, at its own price. Turn this off withuse_archive_copyno. - Paywalls are respected. A page the publisher marks as paywalled returns a free row with no text. Paywalled and refused pages are never read from an archive.
- robots.txt obeyed by default. Disallowed pages are skipped and counted, and a crawl delay is honored up to 5 seconds.
- One free summary row per site. Addresses found, articles returned, pages refused, paywalled, gone, and out of range, and how many months of the archive index were read, so you can see what the run did not reach.
- Restart aware. If Apify moves the run to another host, the run resumes from its saved position. A restart with no warning can repeat up to the last 10 pages read.
- Cost guards. A maximum per site and a maximum charge per run.
How the data is read
Plain HTTP requests through the Apify proxy pool to the publisher's public pages, as a logged out visitor receives them, parsed from the HTML the server returns. Addresses and copies of gone pages come from the Internet Archive's public services. No login, no key, no AI, and no other developer's actor.
A refused read (HTTP 403 or 429, or a challenge page) is final: the actor does not retry it on a new address and does not try another route. It backs off and returns a free row. If the archive capture index refuses a read, the actor stops reading the index for that site and says so on the summary row.
Input
| Field | Type | Default | What it does |
|---|---|---|---|
sites | array | News sites by domain, for example techcrunch.com, up to 20. | |
date_from | string | The earliest published date, as YYYY-MM-DD. Default: 30 days before Date to. | |
date_to | string | The latest published date, as YYYY-MM-DD. Default: today. | |
max_articles_per_site | string | 100 | Articles to return from each site, up to 5,000. Default 100. |
url_contains | array | Optional. Keep only addresses with any of these texts, for example /politics/. | |
min_words | string | 80 | Pages with fewer words are not counted as articles and are free. Default 80. |
use_archive_index | string | yes | yes (default): when the sitemaps run out, also find addresses in the Internet Archive capture index, which reaches years that sitemaps no longer list. no: sitemaps only. |
use_archive_copy | string | yes | yes (default): a page the site answers with 404, 410, 500, 502, or 504 is read from the Internet Archive, at the archived row price. Refused and paywalled pages are never read from an archive. no: gone pages return a free row. |
obey_robots | string | yes | yes (default): pages robots.txt disallows are skipped and counted. no: read them anyway. |
max_charge_usd | string | Optional. The run stops before a charge that would pass this amount. Summary rows are always returned. |
Output
| Field | Type | What it holds |
|---|---|---|
row_type | string | One of: article, skipped_page, site_summary, run_summary. run_summary is the one free row written when the input is refused. |
site | string | The site this row came from. |
url | string | The article address that was found. |
final_url | string | The address after redirects. |
found_from | string | sitemap, or archive_index for an address from the Internet Archive capture index. |
read_from | string | live for the publisher's page, archive for an Internet Archive copy of a page gone from the site. |
archive_url | string | The Internet Archive address read, for an archive row. |
archive_captured_at | string | When the Internet Archive captured the copy. |
http_status | integer | The status the publisher's page answered with. |
title | string | The headline. |
author | string | The byline, when the page states one. |
section | string | The section, when the page states one. |
published_at | string | The published date and time from the page, UTC. |
date_source | string | Where the date came from: structured_data, meta_tag, time_tag, or address. An address gives the day only. |
modified_at | string | The last modified time, when the page states one. |
description | string | The summary the page gives. |
language | string | The language the page declares. |
image_url | string | The lead image address, when the page gives one. |
word_count | integer | Words in text. |
text | string | The full article text as served to a logged out visitor, paragraphs separated by a blank line. |
date_from | string | The start of the date range, on a site summary row. |
date_to | string | The end of the date range, on a site summary row. |
candidates_found | integer | Article addresses found for this site. |
articles_returned | integer | Article rows returned for this site. |
articles_from_archive | integer | Article rows read from the Internet Archive. |
pages_paywalled | integer | Pages marked as paywalled. Their text is not returned. |
pages_blocked | integer | Pages the site refused. |
pages_gone | integer | Pages gone from the site with no archive copy read. |
pages_out_of_range | integer | Pages whose published date is outside the range. |
pages_no_date | integer | Pages with no published date, so they could not be placed in the range. |
pages_not_article | integer | Pages with too little text, or not article pages. |
pages_skipped_robots | integer | Pages robots.txt disallows. |
pages_failed | integer | Pages with a network or server error. |
sitemap_files_read | integer | Sitemap files read, up to 12. |
archive_months_read | integer | Months of the capture index read. |
archive_months_total | integer | Months the date range covers. |
oldest_article | string | The oldest published day returned for this site. |
newest_article | string | The newest published day returned for this site. |
row_status | string | ok, or why this row carries no data: no_results, no_change, partial, blocked, or error. |
error_reason | string | Why the row is not ok. A refused input reads input_invalid: followed by what to fix. |
billable_events_json | string | What this row was billed as, for example {"article-row":1}. {} means free. |
scraped_at | string | When the row was written, UTC. |
Pricing
Pay per event. You pay for articles returned and the run start. Refused, paywalled, gone, and out of range pages, summary rows, and a refused input are free.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
article-row, one article read from the publisher's page | $0.003 | $0.00285 | $0.0027 | $0.00255 |
archived-article-row, one article read from an Internet Archive copy, only for a page gone from the site | $0.003 | $0.00285 | $0.0027 | $0.00255 |
apify-actor-start, once per run (one per GB of memory; the default 256 MB is one) | $0.021 | $0.021 | $0.021 | $0.021 |
Per 1,000 rows of article-row: $3.00 on the free plan, $2.55 on Gold.
Free plan cap: 1.50 USD of evaluation a month, about 500 rows. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your max_charge_usd input.
Mamba Labs pays the platform costs of your run, Apify proxy traffic included.
Usage examples
One month of a site.
{"sites": ["techcrunch.com"],"date_from": "2016-01-01","date_to": "2016-01-31","max_articles_per_site": "50"}
Ten years from three sites, politics pages only.
{"sites": ["site-one.com", "site-two.com", "site-three.com"],"date_from": "2015-01-01","date_to": "2024-12-31","url_contains": ["/politics/"],"max_articles_per_site": "5000","max_charge_usd": "40"}
Read the rows with GET https://api.apify.com/v2/datasets/{datasetId}/items. Use the Text view for the article text, and the Summary view for what each site returned.
Clay. Number and yes or no inputs are text fields, which is what Clay sends. A list input takes a JSON list, so put the column inside a one item list.
MCP. The Mamba Labs MCP server @mambalabsdev/mcp-news-site-article-archive exposes this actor to Claude and other MCP clients.
Error handling
| Case | What you get |
|---|---|
| Missing or unreadable input | One free row, row_type run_summary, error_reason starting input_invalid: with what to fix. The run ends successfully and charges nothing but the run start |
| The site refuses a page or shows a challenge page | A free skipped_page row with row_status blocked. After 5 refused pages in a row the site stops, and the summary row says so. A site that refuses its home page is not read at all |
| A page is marked as paywalled | A free skipped_page row with row_status blocked, the title, and the date, with no text |
| A page is gone and has no archive copy | A free skipped_page row with row_status no_results |
| The archive capture index stops answering | The site summary row reads partial and says so. Sitemap addresses are still read |
| No readable article in the range | A free summary row with row_status no_results or blocked |
| The run is close to its timeout | The actor stops starting new work 90 seconds before the timeout and delivers what it has |
Limitations
- Coverage depends on the site. Sites behind an anti bot wall (for example a Cloudflare challenge) refuse the proxy pool and return free rows. In testing, apnews.com and nytimes.com article reads were refused, so those sites return little. The actor does not solve challenges, and it does not use residential addresses or a browser to get past one.
- Paywalled text is not returned, and no archive copy is read in its place. Pages that read as paywalled by a marker or a phrase are judged by fixed rules, so a rare one can be missed or wrongly flagged.
- Article addresses are only as complete as the sitemaps and the Internet Archive's captures. An article with neither is not found, and one first captured after the range ends is found only if a sitemap lists it. Use the summary row counts to judge a run.
- The capture index is a public service that can be slow or busy. A month takes 10 to 30 seconds, and 10 years is 120 months per site, so a long range needs a long run timeout. Up to 12 sitemap files are read per site, and up to 40 month pages per month.
- With several sites, each takes a fair share of the run's time and the summary row says when a site used its share. Raise the run timeout for long ranges.
- Oldest months are read first, so a low maximum returns the oldest articles in the range, not a spread across it.
- No browser. A site that builds its articles with JavaScript in the visitor's browser returns little or nothing, and those pages count as not articles.
- A page with no published date on it or in its address cannot be placed in the range, so it is counted and not returned. A date taken from the address gives the day only.
- A run reads up to 5 times the maximum articles plus 100 pages per site, then stops that site and says so.
- Publishers' terms differ, and several state limits on automated collection or reuse, including for AI training. How you use the text is yours to check.
Changes
- 2026-11-09: the start price went from 0.014 USD to 0.021 USD. A run that finds no article measured up to 0.00328 USD on the current build.
- 2026-11-08: a refused read is no longer retried on a new proxy address, and a refusal from the archive capture index stops index reads for that site. The start price went from 0.02 USD to 0.005 USD, then to 0.014 USD the same day, so a run that finds no article still costs less than its price.
Mamba Labs actor suite
Built by Mamba Labs.