The Economic Events Data API provides past and future events like Retail Sales, Bond Auctions, PMI Releases, and many other economic events from countries around the world. The data starts in December 2019.
API Endpoint
To get economic events data, use the following URL:
https://eodhd.com/api/economic-events?api_token=demo&fmt=json
curl --location "https://eodhd.com/api/economic-events?api_token=demo&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/economic-events?api_token=demo&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/economic-events?api_token=demo&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/economic-events?api_token=demo&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Economic Events is included in the Fundamentals and All-In-One plans only. The demo key and keys of other plans, including the free plan, return HTTP 403, so the examples on this page need your own API key from one of these two plans.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| api_token | String | Yes | Your API key. |
| from | String | No | Start date in YYYY-MM-DD format. |
| to | String | No | End date in YYYY-MM-DD format. |
| country | String | No | Country code in ISO 3166 format (2 characters, e.g. US, GB, JP). |
| comparison | String | No | Comparison type: mom (month-over-month), qoq (quarter-over-quarter), yoy (year-over-year). |
| type | String | No | Event type filter. Use the exact event name, the match is case-sensitive (e.g. House Price Index). |
| offset | Integer | No | Pagination offset. Values: 0–1000. Default: 0. The maximum offset is 1000, so split larger exports into several date ranges. |
| limit | Integer | No | Number of results. Values: 1–1000. Default: 50. |
Response Fields
The API returns a JSON array of economic event objects, newest first. Each object contains the following fields:
| Field | Type | Description |
|---|---|---|
| type | String | Type of economic event (e.g. “GDP Growth Rate”, “Nonfarm Payrolls”). |
| comparison | String or null | Comparison type: “mom”, “qoq”, “yoy”, or null if not applicable. |
| period | String or null | Period associated with the event (e.g. “Q4”, “Jan”, “May”), or null if not applicable. |
| country | String | Country code in ISO 3166 format (e.g. “US”, “JP”). |
| date | String | Date and time of the event in YYYY-MM-DD HH:MM:SS format. |
| actual | Number or null | Actual reported value. |
| previous | Number or null | Previous value for the same event. |
| estimate | Number or null | Estimated (forecast) value. |
| change | Number or null | Change from previous value. |
| change_percentage | Number or null | Percentage change from previous value. |
Response Example
[
{
"type": "Capital Expenditure",
"comparison": "yoy",
"period": "Q4",
"country": "JP",
"date": "2025-03-03 23:50:00",
"actual": -0.2,
"previous": 8.1,
"estimate": 4.9,
"change": -8.3,
"change_percentage": -102.469
},
{
"type": "Jobs/applications ratio",
"comparison": null,
"period": "Jan",
"country": "JP",
"date": "2025-03-03 23:30:00",
"actual": 1.26,
"previous": 1.25,
"estimate": 1.25,
"change": 0.01,
"change_percentage": 0.8
}
]
Request Examples
Get all economic events for a specific date range:
https://eodhd.com/api/economic-events?api_token=demo&from=2025-03-01&to=2025-03-07&fmt=json
curl --location "https://eodhd.com/api/economic-events?api_token=demo&from=2025-03-01&to=2025-03-07&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/economic-events?api_token=demo&from=2025-03-01&to=2025-03-07&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/economic-events?api_token=demo&from=2025-03-01&to=2025-03-07&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/economic-events?api_token=demo&from=2025-03-01&to=2025-03-07&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Filter by country (e.g. United States):
https://eodhd.com/api/economic-events?api_token=demo&from=2025-03-01&to=2025-03-07&country=US&fmt=json
curl --location "https://eodhd.com/api/economic-events?api_token=demo&from=2025-03-01&to=2025-03-07&country=US&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/economic-events?api_token=demo&from=2025-03-01&to=2025-03-07&country=US&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/economic-events?api_token=demo&from=2025-03-01&to=2025-03-07&country=US&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/economic-events?api_token=demo&from=2025-03-01&to=2025-03-07&country=US&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Filter by comparison type (year-over-year only):
https://eodhd.com/api/economic-events?api_token=demo&from=2025-03-01&to=2025-03-07&comparison=yoy&fmt=json
curl --location "https://eodhd.com/api/economic-events?api_token=demo&from=2025-03-01&to=2025-03-07&comparison=yoy&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/economic-events?api_token=demo&from=2025-03-01&to=2025-03-07&comparison=yoy&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/economic-events?api_token=demo&from=2025-03-01&to=2025-03-07&comparison=yoy&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/economic-events?api_token=demo&from=2025-03-01&to=2025-03-07&comparison=yoy&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Filter by event type:
https://eodhd.com/api/economic-events?api_token=demo&from=2025-01-01&to=2025-03-31&type=GDP%20Growth%20Rate&fmt=json
curl --location "https://eodhd.com/api/economic-events?api_token=demo&from=2025-01-01&to=2025-03-31&type=GDP%20Growth%20Rate&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/economic-events?api_token=demo&from=2025-01-01&to=2025-03-31&type=GDP%20Growth%20Rate&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/economic-events?api_token=demo&from=2025-01-01&to=2025-03-31&type=GDP%20Growth%20Rate&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/economic-events?api_token=demo&from=2025-01-01&to=2025-03-31&type=GDP%20Growth%20Rate&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Combine multiple filters with pagination:
https://eodhd.com/api/economic-events?api_token=demo&from=2025-01-01&to=2025-06-30&country=US&comparison=mom&limit=10&offset=0&fmt=json
curl --location "https://eodhd.com/api/economic-events?api_token=demo&from=2025-01-01&to=2025-06-30&country=US&comparison=mom&limit=10&offset=0&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/economic-events?api_token=demo&from=2025-01-01&to=2025-06-30&country=US&comparison=mom&limit=10&offset=0&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/economic-events?api_token=demo&from=2025-01-01&to=2025-06-30&country=US&comparison=mom&limit=10&offset=0&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/economic-events?api_token=demo&from=2025-01-01&to=2025-06-30&country=US&comparison=mom&limit=10&offset=0&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)