Economic Calendar Scraper
Pricing
from $2.00 / 1,000 event scrapeds
Economic Calendar Scraper
Economic calendar scraper for Forex Factory and Investing.com: NFP, CPI, rate decisions, PMIs with UTC time, impact, actual, forecast, previous. Pay per event.
Pricing
from $2.00 / 1,000 event scrapeds
Rating
0.0
(0)
Developer
Romas Jurevicius
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Share
Economic Calendar Scraper
Economic Calendar turns the public macro calendars that traders watch every day into one clean, machine-readable feed. It returns one JSON record per scheduled event - Non-Farm Payrolls, CPI, central bank rate decisions, PMIs, GDP, retail sales, speeches, bank holidays - with the release time in UTC and ISO 8601, the country and currency, the expected market impact (high, medium, low, holiday), and the actual, forecast, previous and revised figures both as the source shows them ("3.2%", "-68.3K") and as parsed numbers with a unit (3.2, "%"). No account, API key or login is needed on either source.
Typical uses: feeding an AI trading agent or risk engine that must know when the next high-impact release lands, building "no trading 30 minutes around NFP" guards, backfilling a research dataset with actual-vs-forecast surprises, alerting a Telegram or Slack channel before red-folder events, or powering a calendar widget without maintaining your own scrapers.
Two sources are supported and can be combined in one run:
forexfactory(stable) - the Forex Factory calendar page for any date window, with actuals, revisions, better/worse markers and optional per-event detail (source, measures, usual effect, frequency).investing(experimental) - the Investing.com calendar API covering 100+ countries, with numeric values, precision, units, preliminary flags, reference periods and exchange holidays.
How to scrape an economic calendar
- Open the Actor in Apify Console and click Try for free.
- Pick the Sources (default: Forex Factory) and, optionally, a Date from / Date to window. The default is today to seven days ahead.
- Narrow the output with Currencies (for example
USD,EUR,GBP) and Impact (for example onlyhigh). Filtering happens before anything is charged, so a high-impact-only run costs only the high-impact events. - Turn on Include details if you want the event description and specs next to each record.
- Click Start. Results appear in the Output tab within seconds and can be downloaded as JSON, CSV or Excel, or read through the API.
How the fetching works
For Forex Factory the Actor loads the calendar for the requested window in a single request per 62 days (the page's maximum range), pinned to US Eastern time so the time labels are deterministic. The page embeds every event with a Unix timestamp, which is what datetimeUtc is built from - the label shown on the page is never parsed for the time. If the page is unreachable (for example a Cloudflare challenge from a bad proxy IP), the Actor falls back to Forex Factory's public weekly JSON feed, which covers only the current Sunday-to-Saturday week and carries no actual values; the run then logs a warning and clamps the window.
For Investing.com the Actor calls the same JSON API the website uses (endpoints.investing.com/.../calendars/economic/events/occurrences), pages through it with cursors in blocks of 200, then adds exchange holidays from the holidays endpoint, de-duplicated per country and day.
Requests are serialized with a one-second gap and retried on network errors, 429 and 5xx responses. All events are pushed in time order, and an event id is remembered in the run state so a migrated or resurrected run never charges the same event twice.
Economic Calendar Scraper pricing
This Actor uses Apify's pay-per-event model. There is no subscription and no per-result platform fee on top:
- Actor start: a flat fee of $0.00005 per run.
- Calendar event scraped: $0.002 per event pushed to your dataset (that is $2 per 1,000 events).
Filtering by currency and impact is free and happens before charging - a week of only high-impact USD events is typically 5-15 events, so well under $0.05. Status records for a source that was unavailable or returned nothing are free. You can cap spending with Maximum cost per run; when the cap is reached the Actor stops cleanly and keeps everything scraped so far.
Input example
{"sources": ["forexfactory"],"dateFrom": "2026-10-12","dateTo": "2026-10-18","currencies": ["USD", "EUR"],"impact": ["high", "medium"],"includeDetails": false,"proxyConfiguration": { "useApifyProxy": true }}
Input fields
| Field | Type | Default | Description |
|---|---|---|---|
sources | array of forexfactory / investing | ["forexfactory"] | Which calendars to read. Both can be combined; each event carries its source. |
dateFrom | ISO date YYYY-MM-DD | today (UTC) | First calendar day to include. |
dateTo | ISO date YYYY-MM-DD | dateFrom + 7 days | Last day to include (inclusive). Up to 367 days per run. |
currencies | array of strings | none | Keep only these ISO currency codes. Use ALL to keep Forex Factory's worldwide events (OPEC, G20, IMF). |
impact | array of high / medium / low / holiday | none | Keep only these impact levels. |
includeDetails | boolean | false | Add a detail object with description and specs (one extra page per event type on Forex Factory; free on Investing.com). |
proxyConfiguration | object | Apify Proxy | Standard Apify proxy settings. |
Output example
One dataset item per event:
{"source": "forexfactory","eventId": "7d1d9fa5f1a4e5c2","sourceEventId": "150997","title": "Employment Change","country": "Canada","countryCode": "CA","currency": "CAD","datetimeUtc": "2026-10-09T12:30:00.000Z","date": "2026-10-09","timeLocalLabel": "8:30am","sourceTimezone": "America/New_York","impact": "high","actual": "-68.3K","forecast": "6.1K","previous": "-41.7K","revised": null,"actualValue": -68.3,"forecastValue": 6.1,"previousValue": -41.7,"revisedValue": null,"unit": "K","actualVsForecast": "worse","revisedVsPrevious": null,"isTentative": false,"isAllDay": false,"isPreliminary": false,"referencePeriod": null,"detail": {"description": "Job creation is an important leading indicator of consumer spending...","specs": {"source": "Statistics Canada (latest release)","sourceUrl": "https://www.statcan.gc.ca/","measures": "Change in the number of employed people during the previous month","usualEffect": "'Actual' greater than 'Forecast' is good for currency","frequency": "Released monthly, usually on the first Friday after the month ends","eventType": "Employment"},"detailUrl": "https://www.forexfactory.com/calendar/60-ca-employment-change"},"sourceUrl": "https://www.forexfactory.com/calendar?day=oct9.2026#detail=150997","scrapedAt": "2026-10-10T20:08:22.675Z"}
Field notes:
eventIdis a stable SHA-1 prefix of source + date + currency + title + UTC time (HH:MM), so the same release hashes to the same id on every run and two speeches by the same person on one day stay distinct.sourceEventIdis the source's own id.datetimeUtcis the release instant.dateandtimeLocalLabelare what the source displays, insourceTimezone(America/New_Yorkfor Forex Factory,UTCfor Investing.com). For all-day and tentative eventsdatetimeUtcis the source's placeholder time.previousis the prior print as originally published;revisedis the revised prior print when the source shows a revision, otherwisenull. The "effective previous" isrevised ?? previous.revisedVsPrevioustells you which way it was revised.- Numeric fields keep the unit's scale:
"1.25M"becomesactualValue: 1.25, unit: "M". Strings that are not numbers ("Unch", a rate range) keepvalue: nulland the raw text inunit. actualVsForecastis the source's own better/worse judgement (nullwhen neutral, missing or the event has no usual effect).currencyisALLfor worldwide events (Forex Factory's OPEC / G20 / IMF rows), withcountryandcountryCodeset tonull.detailis only present whenincludeDetailsis on. Forex Factory specs keys depend on the event (source,sourceUrl,measures,usualEffect,frequency,acroExpand,eventType, ...); Investing.com providessource,sourceUrlandcategory.
A source that could not be read produces a single free record with status: "unavailable" (or "empty") and a message containing the HTTP status and a body snippet, so your pipeline can tell "no events" from "source down".
Integrations
- API: start runs and read results with the Apify API or the JavaScript and Python clients. Run the Actor synchronously with
run-sync-get-dataset-itemsto get the week's events in one call. - MCP / AI agents: the Actor is exposed through the Apify MCP server at
https://mcp.apify.com. Add it to Claude Desktop, Cursor, ChatGPT or any MCP-capable trading agent, enable this Actor as a tool, and the agent can call it with the same input (for example{"impact": ["high"], "currencies": ["USD"], "dateFrom": "2026-10-12", "dateTo": "2026-10-16"}) to plan around releases. No custom MCP server is needed; the Actor's input schema becomes the tool schema. - n8n and Make: use the Apify node or module, pick this Actor, pass the input JSON above and map the dataset items into your workflow.
- Schedules and webhooks: run it every morning from Apify Schedules and let a webhook push the day's high-impact events to Slack, Telegram, Google Sheets or your database.
Sources and limitations
Forex Factory (forexfactory, stable). Read from the public calendar page (forexfactory.com/calendar?range=...), which answers plain HTTPS requests without login. Verified on 2026-10-10: a one-week window returned 109 events with correct UTC times, 13 of them high impact, and a past window returned actuals, revisions and better/worse markers. The site is behind Cloudflare; if a proxy IP is challenged the Actor falls back to the weekly JSON feed (nfs.faireconomy.media/ff_calendar_thisweek.json), which only covers the current week and has no actual values - that fallback is logged as a warning on the run. The nextweek and lastweek feed variants return 404 at the time of writing. Forex Factory covers the nine major currencies plus CNY and worldwide events; it does not list emerging-market calendars. Per-event details cost one extra request per distinct event type and are fetched only for events that survive your filters.
Investing.com (investing, experimental). Read from the JSON API behind the website's calendar. Verified on 2026-10-10: a three-day window returned 172-173 events across 26 currencies directly and through Apify datacenter proxy, including exchange holidays. The limitation is the site's web application firewall: it answers a bare 403 for some datacenter and residential proxy IPs and runs a Cloudflare JavaScript challenge for clients without a browser TLS fingerprint. The Actor retries a 403 with a fresh proxy session, and if the API still refuses it pushes a free unavailable status record with the status code and body snippet instead of inventing data. Investing.com does not expose "tentative" or "all day" flags, so isTentative is always false there and all-day holidays come from the holidays endpoint. Reported values are numeric with a precision; the Actor renders the display strings from them (197 + K + precision 0 becomes "197K").
Both sources publish figures as they are released and can revise them later; scrapedAt tells you when the record was taken. Times for events without a fixed slot (holidays, multi-day meetings, "tentative" data) are placeholders chosen by the source.
Economic Calendar Scraper FAQ
Can I get only high-impact events for one currency?
Yes - set impact: ["high"] and currencies: ["USD"]. Filtering runs before charging, so you pay only for the events you receive.
How far back or ahead can I go?
Forex Factory serves any historical or future window; the Actor splits long windows into 62-day requests, up to 367 days per run. Investing.com's API also serves past and future dates. Actual values exist only for releases that have already happened.
Are the times in my timezone?
datetimeUtc is always UTC; convert it on your side. timeLocalLabel and date reflect the source's display timezone (sourceTimezone), which is US Eastern for Forex Factory - the same convention Forex Factory users are used to.
Why do I see ALL as a currency?
Forex Factory tags worldwide events (OPEC meetings, G20, IMF) with "All". Include ALL in currencies if you filter by currency and still want them.
What happens if a source is down?
The run still succeeds with the other source(s), and a free unavailable record explains what failed (HTTP status and body snippet). Nothing is faked.
Related actors
Same author, same pay-per-event model and the same no-login approach. They combine well in one pipeline (for example calendar events plus prediction odds plus channel chatter around a release):
- Telegram Channel Scraper - posts, views, media and links from public Telegram channels, no login.
- Substack Scraper - posts, authors, likes, restacks and comments from public Substack publications, custom domains included.
- Prediction Market Odds Scraper - Polymarket and Kalshi markets with 0-1 prices, implied probabilities, bid/ask, volume and orderbooks.
- Product Hunt Scraper - daily, weekly and monthly leaderboards, topic pages, search and product launches with votes, makers and website URLs.
Legal and compliance
This Actor only reads publicly available pages and endpoints that the sources serve to anyone without logging in, and it does not bypass any access control or CAPTCHA. Economic calendar facts (release times, official figures) are public data, but each site's presentation is subject to its own terms: see Forex Factory's terms and Investing.com's terms of use. You are responsible for using the data in line with those terms and applicable law, especially for commercial redistribution. Keep request rates low (the Actor already serializes requests with a delay) and read Apify's article on the legality of web scraping if you are unsure.
Support
Found an event that parses wrongly, a missing currency, or need another source (ECB, FOMC schedules, earnings)? Open an issue on the Actor's Issues tab in Apify Console or contact the author through the Actor page. Reports that include the input JSON and the event title are usually fixed within days.