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 is available from 2020.
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)
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 (e.g. &type=House%20Price%20Index). |
| offset | Integer | No | Pagination offset. Values: 0–1000. Default: 0. |
| limit | Integer | No | Number of results. Values: 0–1000. Default: 50. |
Response Fields
The API returns a JSON array of economic event objects. 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)