Forex Factory Economic Calendar Scraper
Pricing
Pay per event
Forex Factory Economic Calendar Scraper
π Export current-week Forex Factory macro events with stable IDs, currency, impact, forecast, previous value, local schedule, and canonical URLs. Filter records for trading-risk dashboards, alerts, and market-data pipelines.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Export the current-week Forex Factory economic calendar as clean JSON, CSV, Excel, XML, or RSS-ready dataset records.
Get event titles, currencies, local dates and times, impact levels, forecasts, previous values, stable IDs, and canonical Forex Factory URLs without a login or API key.
This Actor is designed for repeat schedules: trading-risk dashboards, market alerts, quantitative pipelines, newsletters, and research notebooks can refresh the same structured contract throughout the week.
The source feed does not declare a timezone. This Actor preserves the source-local schedule and never invents a UTC instant.
What does Forex Factory Economic Calendar Scraper do?
The Actor fetches Forex Factory's public current-week structured feed and turns every valid macroeconomic event into a normalized dataset row.
It can:
- π extract this week's economic calendar events;
- π± select currencies such as USD, EUR, GBP, JPY, CAD, AUD, NZD, or CHF;
- π¨ select High, Medium, Low, or Holiday impact levels;
- π restrict results to an inclusive local-date window;
- π§© create a deterministic event ID for deduplication;
- π preserve the canonical Forex Factory event URL;
- π€ export results through Apify datasets and integrations.
The minimum product intentionally stays on the proven public current-week feed. It does not claim arbitrary historical coverage.
Who is it for?
Traders and risk managers
Build a weekly risk calendar before entering positions. Filter to High-impact USD or EUR releases and send the records to an alerting tool.
Quantitative and market-data teams
Load normalized event schedules into a warehouse, join them to price series, and use stable IDs to avoid duplicate processing.
Newsletters and research desks
Create a repeatable list of upcoming macro events, forecasts, and previous values for briefing documents.
Automation builders
Run the Actor on a schedule and connect the dataset to Slack, Google Sheets, webhooks, Make, Zapier, or custom code.
Why use this economic calendar extractor?
Forex Factory presents useful macroeconomic information, but automation needs a stable machine-readable contract.
This Actor adds:
- normalized dates in
YYYY-MM-DDformat; - normalized clock times in 24-hour format when available;
- safe timezone handling with
timezone: nullwhen the feed is silent; - null preservation for blank forecasts and previous values;
- stable IDs derived from event identity fields;
- bounded retries and validation instead of silent empty output;
- pay-per-event billing aligned with produced data.
What data can I extract?
| Field | Type | Description |
|---|---|---|
eventId | string | Stable 24-character event identifier |
title | string | Economic event title |
currency | string | Three-letter affected currency code |
localDate | string | Source-local date in YYYY-MM-DD |
localTime | string | 24-hour time, All Day, Tentative, or Unscheduled |
localDateTime | string or null | Timezone-free local datetime when a clock time exists |
timezone | null | Explicit null because the XML feed declares no timezone |
impact | string | High, Medium, Low, or Holiday |
forecast | string or null | Forecast value exactly as supplied |
previous | string or null | Previous value exactly as supplied |
url | string | Canonical Forex Factory calendar URL |
source | string | Forex Factory |
scrapedAt | string | UTC extraction timestamp |
How to scrape the Forex Factory calendar
- Open the Actor input page.
- Set Maximum events to the number you need.
- Optionally add currency codes such as
USDandEUR. - Optionally select impact levels such as
High. - Optionally enter
dateFromanddateTousingYYYY-MM-DD. - Click Start.
- Open the dataset to preview or export the economic events.
- Add a schedule if you need recurring refreshes.
The default input is deliberately small enough for a fast first run.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
maxItems | integer | 100 | Maximum matching events to save, from 1 to 500 |
currencies | string[] | [] | Optional three-letter currency filters |
impacts | string[] | [] | Optional High, Medium, Low, or Holiday filters |
dateFrom | string | unset | Inclusive source-local start date |
dateTo | string | unset | Inclusive source-local end date |
Empty filter arrays include all source values. Currency matching is case-insensitive.
Invalid date formats, invalid currency codes, reversed date ranges, and unsupported impact values fail closed.
Example input: high-impact USD events
{"currencies": ["USD"],"impacts": ["High"],"maxItems": 50}
For a broad weekly export:
{"maxItems": 100}
For a major-currency risk monitor:
{"currencies": ["USD", "EUR", "GBP", "JPY"],"impacts": ["High", "Medium"],"maxItems": 200}
Example output
{"eventId": "37d74dd9479b359e70134b18","title": "BusinessNZ Services Index","currency": "NZD","localDate": "2026-07-12","localTime": "22:30","localDateTime": "2026-07-12T22:30:00","timezone": null,"impact": "Low","forecast": null,"previous": "47.5","url": "https://www.forexfactory.com/calendar/852-nz-businessnz-services-index","source": "Forex Factory","scrapedAt": "2026-07-16T02:30:00.000Z"}
Values such as percentages or abbreviations remain strings because the source may include units and revisions.
Local time and timezone semantics
The public current-week export provides a date and time but does not declare an IANA timezone or UTC offset in the complete CSV/XML record.
Accordingly:
localDatepreserves the calendar date;localTimenormalizes ordinary clock times to 24-hour form;localDateTimecombines those values without a timezone suffix;timezoneis alwaysnull;- all-day or tentative events have
localDateTime: null.
Consumers should apply a timezone only when they have an independently verified source rule. This avoids shifting releases to the wrong instant.
Stable IDs and scheduled monitoring
The eventId is derived from title, currency, date, time, and canonical URL.
For scheduled workflows:
- store the latest dataset in your database;
- use
eventIdas a natural deduplication key; - compare forecasts or previous values when the same ID reappears;
- alert only when a record is new or changed.
IDs are stable for unchanged source records, but a corrected source schedule can intentionally produce a new ID.
How much does it cost to scrape Forex Factory events?
The Actor uses pay-per-event pricing. A run costs $0.005 to start, then one item event per saved economic event.
| Apify tier | Price per saved event | 100 events plus start |
|---|---|---|
| Free | $0.000042972 | about $0.00930 |
| Bronze | $0.000037367 | about $0.00874 |
| Silver | $0.000029146 | about $0.00791 |
| Gold | $0.000022420 | about $0.00724 |
| Platinum | $0.000014947 | about $0.00649 |
| Diamond | $0.000010463 | about $0.00605 |
Input filters and maxItems let you cap output and spending. A run that saves 20 events charges one start event and 20 item events. Filtered-out source records are not item-charged.
Tips for reliable calendar workflows
- ποΈ Run on a schedule appropriate for your dashboard, not every minute by default.
- π¨ Use impact filters when only market-moving releases matter.
- π± Use uppercase ISO-style codes in documentation, although input matching is case-insensitive.
- π Deduplicate on
eventId, not title alone. - π Treat local schedule fields as timezone-free unless you verify the source convention.
- π¦ Export the dataset after each run or consume it through the API.
- π Preserve null forecasts; a blank value is different from zero.
Integrations and automation patterns
Google Sheets briefing
Schedule the Actor before a weekly trading meeting and export the dataset to a Sheet sorted by local date and impact.
Slack or email risk alerts
Filter to High-impact currencies, compare IDs against the prior run, and post new events to a risk channel.
Data warehouse ingestion
Use a webhook to copy completed dataset rows into BigQuery, Snowflake, PostgreSQL, or another warehouse.
Market-research notebook
Fetch dataset JSON in Python and join local event schedules to independently timezone-normalized market data.
Make and Zapier
Trigger a run on a schedule, iterate dataset rows, and route events by currency or impact.
API usage with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/forex-factory-economic-calendar-scraper').call({currencies: ['USD', 'EUR'],impacts: ['High'],maxItems: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python API example
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/forex-factory-economic-calendar-scraper').call(run_input={'currencies': ['USD', 'EUR'],'impacts': ['High'],'maxItems': 50,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
cURL API example
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~forex-factory-economic-calendar-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"currencies":["USD"],"impacts":["High"],"maxItems":50}'
After the run succeeds, read its defaultDatasetId and request /v2/datasets/{DATASET_ID}/items.
Use with Apify MCP
Connect Claude Code with:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/forex-factory-economic-calendar-scraper"
For Claude Desktop, Cursor, or VS Code, add an HTTP MCP server configuration:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/forex-factory-economic-calendar-scraper"}}}
Example prompts:
- βExtract this week's high-impact USD Forex Factory events.β
- βBuild a JSON list of medium- and high-impact EUR and GBP releases.β
- βCompare these event IDs with yesterday's dataset and summarize changes.β
Source coverage and limitations
The Actor covers the current public weekly feed available at run time.
It does not:
- crawl arbitrary historical date ranges;
- predict future values;
- provide trading advice;
- invent missing forecast or previous values;
- convert local schedules to UTC without source timezone evidence;
- scrape private account data.
The upstream feed can revise event dates, times, values, or URLs. Scheduled users should treat each run as a fresh source snapshot.
Data quality and error handling
The extractor validates required titles, dates, currency codes, impact levels, and canonical event URLs.
Individual malformed records are skipped with warning logs. A missing feed root or a feed with no parseable events fails rather than returning a misleading empty success.
Requests use a finite timeout and bounded retries. The actor explicitly decodes the feed's declared Windows-1252 encoding.
Legality: is scraping Forex Factory legal?
This Actor reads an anonymously accessible public structured feed and does not bypass login controls.
You are responsible for your use of the data, including compliance with applicable laws, contracts, Forex Factory terms, intellectual-property rights, and privacy obligations.
Use reasonable schedules, avoid unnecessary load, and do not present the output as investment advice.
FAQ
Does the Actor need a Forex Factory account?
No. The current-week feed used by this Actor is publicly accessible without a login or API key.
Can I scrape last month or any custom historical range?
Not in v1. The reliable product scope is the public current-week feed. Date filters narrow that feed; they do not request historical pages.
Why is timezone null?
The complete CSV/XML record does not declare a timezone. Returning null is safer than inventing an offset that could move an event to the wrong instant.
Why are some forecasts or previous values null?
Forex Factory leaves some values blank, especially before estimates are available. The Actor preserves blanks as null rather than treating them as zero.
Why did my filtered run return no events?
The selected currencies, impacts, or local date range may not occur in the current weekly feed. Remove filters or inspect the unfiltered weekly export.
Why did the run reject my date?
Use YYYY-MM-DD, for example 2026-07-16. Ensure dateFrom is not later than dateTo.
Can I stop after a fixed number of records?
Yes. Set maxItems from 1 to 500. It applies after filtering.
Can I use the output for automated trading?
You can integrate it into your own systems, but verify timing and data independently. The Actor is a data extraction tool, not financial advice.
Related scrapers
Combine this Actor with other automation-lab data tools:
- Trading Economics Indicators Scraper for broader indicator datasets.
- SEC 8-K Current Reports Scraper for market-moving company filings.
- US Treasury Fiscal Data Scraper for official fiscal series.
Choose this Actor when your workflow specifically needs the Forex Factory current-week event feed.
Support
If a run fails unexpectedly, share the run URL and a minimal input that reproduces the issue through the Actor page.
Useful details include:
- the currency and impact filters used;
- the local date range;
- whether an unfiltered run worked;
- the expected event title or URL.
These details make source-feed changes and parser regressions faster to diagnose.