Skip to content
Live news Screener Coverage Pricing Docs REST API WebSocket API MCP server Company Use cases Blog Changelog Status Compare Contact
ALGRF$0.400.00(0.00%)Algo Grande Commissions Independent NI 43-101 Update to Capture First Year of Progress at Adelita[5:30:00 PM ET]ZEFIF$0.45+0.02(+3.56%)Zefiro Announces Closing of Non-Brokered Private Placement for Gross Proceeds of Approximately C$5.0 Million[5:29:00 PM ET]BLK$1,118.50-18.79(-1.65%)BlackRock® Canada Announces the Termination of iShares Convertible Bond Index ETF[5:23:34 PM ET]ITFS$1.43-0.02(-1.10%)Itafos Announces Release Date for Q3 2026 Results and Business Update Webcast[5:15:00 PM ET]FAGI$0.01-0.00(-13.33%)Full Alliance Group, Inc (OTC:FAGI) YAHBEE Highlights Community-Commerce Model for Agentic Commerce Era[5:15:00 PM ET]TGT$152.76-5.35(-3.38%)Vital Farms Introduces a Higher Standard for Free-Range Eggs Through Limited Pilot at Select Target Retail Stores[5:05:00 PM ET]NU$15.20+0.47(+3.19%)Notice to Market: Nu Holdings Ltd.[5:03:00 PM ET]POR$44.55-0.35(-0.78%)Portland General Electric Declares Dividend[5:00:00 PM ET]ANTX$3.55-0.09(-2.47%)AN2 Therapeutics, Inc. Reports Inducement Grants Under Listing Rule 5635(c)(4)[5:00:00 PM ET]EML$24.18-0.67(-2.70%)The Eastern Company Announces Timing of Third Quarter 2026 Earnings Release and Conference Call[4:55:00 PM ET]MYE$32.13-0.70(-2.13%)Myers Industries Announces Quarterly Dividend[4:45:00 PM ET]FCAP$63.35-0.59(-0.92%)First Capital, Inc. Reports Quarterly Earnings[4:45:00 PM ET]AIRDF$0.33-0.01(-3.96%)Rocket Doctor Grants Equity[4:42:20 PM ET]
Tutorial 4 min read

Backfill a year of US stock news with REST

Page GET /v1/news with from, to, sort, and cursor to pull the last year of Pro history.

On Pro, GET /v1/news can page the last year of US stock news, press releases, and legal notices. Send from, to, sort=published_asc, and the cursor from the previous page. Store the article id so a retry does not insert the same row twice.

Which plan can see a year

Free is the last 30 days. If you ask for older dates, the window is clamped and meta.notice says why. Pro, including the 7-day trial, searches the last year. Pro is $15 a month, or $162 a year. The 7-day trial includes the live feed, and a card is required. Free stays at 100 requests a day, delayed 15 minutes, with 30 days of history.

This is a news archive, not a price archive. You get headlines, sources, timestamps, tickers, summaries, and links. Press releases also include the full wire text. Publisher stories and legal notices do not include the publisher's full body.

The request

Filters combine with AND. Comma-separated tickers inside tickers are OR, up to 50 symbols. limit is 1 to 100. Sort ascending when you are filling a database from oldest to newest.

curl "https://api.marketnewsapi.com/v1/news?tickers=AAPL,MSFT&from=2025-11-01&to=2025-11-30&sort=published_asc&limit=100" \
  -H "Authorization: Bearer $MARKETNEWSAPI_KEY"

Read meta.next_cursor. Pass it back as cursor until the field is absent. Keep from, to, tickers, and sort the same on every page. Changing them mid-walk gives you a different result set.

What to store

  • Article id, so a second run is an upsert.
  • published_at, the title, the summary, the tickers, the source, and the original url.
  • The type: news, press_release, or legal.
  • Press-release body when the field is present. Do not expect that field on a publisher story or a legal notice.

When you show a third-party article, a press release, or a legal notice to an end user, keep the source and a working link. The terms do not let you present that item as your own reporting.

How fast to walk the archive

Every account can burst to 20 requests per second. A backfill does not need that rate. One request, then the next cursor, is enough, and it leaves room for the live app on the same key. A 429 comes with Retry-After. Wait that long. Calls to /usage and /status do not count toward the Free daily cap, but a year of pages will, so run it on Pro.

Walk one month at a time

A single from with no to is a legal request, and it is a bad job. Split the year into calendar months. Finish one month, checkpoint it, then start the next. If the process dies on 12 March you rerun March, not the whole year. Keep the checkpoint in your database, not in a log line.

for month in 2025-11 2025-12 2026-01; do
  # from is the first day, to is the last day, sort is published_asc
  # repeat with cursor until meta.next_cursor is empty
  echo "$month"
done

Inside the month, the page size of 100 is the one to use for a backfill. The default page is smaller and only adds round trips. Hold the cursor opaquely. Do not decode it or build the next page yourself.

Try it for 7 days. Signup starts Pro. A card is required. Real-time REST, WebSocket, and MCP, with no request cap. After that it's $15/month, or Free if you stop.

Start 7-day free trial

What Free will do if you point it at last year

Free clamps the window to the last 30 days and explains that in meta.notice. The HTTP call still succeeds, which is how a backfill script can look healthy while it stores three weeks. Read X-Plan before the loop. If it says free, stop. The daily cap is 100 requests per UTC day, shared by every key, and a month of pages will hit 429 daily_limit_reached long before the year is done.

Pro is the plan that can see the last year. The 7-day trial can too, which is enough to prove the loop on one ticker and one month before you leave it running. Pro is $15 a month, or $162 a year. The 7-day trial includes the live feed, and a card is required. Free stays at 100 requests a day, delayed 15 minutes, with 30 days of history.

Ids, order, and the live handoff

Upsert on article id. A press release that also ran on a second wire is stored once: the first copy is kept and the symbols are merged, so you should not write your own cross-wire dedupe on top. You still need id dedupe for your own retries and for the overlap between the last REST page and the first socket message.

When the month walk reaches today, record the newest published_at, open the WebSocket, and fill any hole with one more REST call using that timestamp as from. After that, REST is for search, not for the tail. The parameter list is on GET /news, and the handoff is the one in REST vs WebSocket.

Frequently asked questions

How far back does the MarketNewsAPI archive go?
Paid plans, including the 7-day trial, can search the last year. Free is the last 30 days. Older requests on Free are clamped, and meta.notice explains the window.
How do I page through historical stock news?
Call GET /v1/news with from, to, and sort=published_asc. Take meta.next_cursor and pass it as cursor until it is gone. limit can be up to 100. Keep the other filters the same on every page.
Does a historical download include the full article?
Press releases include the full wire text. Publisher stock news and legal notices include the headline, snippet, summary, entities, and a link to the original. MarketNewsAPI does not republish the publisher's full story.

Real-time stock news for $15 a month.

Start a 7-day Pro trial. A card is required. REST, WebSocket, and MCP are included. If you don't subscribe, the account stays on Free.