GDP (Snapshot)
curl --request GET \
--url https://api.financialdatasets.ai/macro/gdp/snapshot \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.financialdatasets.ai/macro/gdp/snapshot"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://api.financialdatasets.ai/macro/gdp/snapshot', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.financialdatasets.ai/macro/gdp/snapshot",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.financialdatasets.ai/macro/gdp/snapshot"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.financialdatasets.ai/macro/gdp/snapshot")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.financialdatasets.ai/macro/gdp/snapshot")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"gdp": [
{
"series": "<string>",
"date": "<string>",
"value": 123,
"change_prior": 123,
"change_year": 123,
"change_year_pct": 123
}
]
}{
"error": "Bad Request",
"message": "Invalid request parameters"
}{
"error": "Unauthorized",
"message": "Invalid API key provided"
}{
"error": "Payment Required",
"message": "This endpoint requires a paid subscription. Please upgrade your plan."
}{
"error": "Not Found",
"message": "Ticker XXXX not found"
}GDP
Latest GDP Report API
The latest print of all 12 US growth and income series in one call, including real GDP growth, real and nominal GDP, corporate profits, personal income, and the saving rate, with the change from the prior period and from a year earlier.
GET
/
macro
/
gdp
/
snapshot
GDP (Snapshot)
curl --request GET \
--url https://api.financialdatasets.ai/macro/gdp/snapshot \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.financialdatasets.ai/macro/gdp/snapshot"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://api.financialdatasets.ai/macro/gdp/snapshot', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.financialdatasets.ai/macro/gdp/snapshot",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.financialdatasets.ai/macro/gdp/snapshot"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.financialdatasets.ai/macro/gdp/snapshot")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.financialdatasets.ai/macro/gdp/snapshot")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"gdp": [
{
"series": "<string>",
"date": "<string>",
"value": 123,
"change_prior": 123,
"change_year": 123,
"change_year_pct": 123
}
]
}{
"error": "Bad Request",
"message": "Invalid request parameters"
}{
"error": "Unauthorized",
"message": "Invalid API key provided"
}{
"error": "Payment Required",
"message": "This endpoint requires a paid subscription. Please upgrade your plan."
}{
"error": "Not Found",
"message": "Ticker XXXX not found"
}Overview
The GDP Snapshot API returns the most recent print of every growth and income series we track: real GDP growth, the real and nominal level of GDP, the four contributions to growth, income-side growth (GDI), corporate profits, personal income, the saving rate, and real consumer spending. That is 12 rows, each with the change from the prior period and from a year earlier computed for you. Quarterly series show their latest quarter and monthly series their latest month. Passseries to get one row.
We source the data directly from authoritative government sources. The snapshot refreshes within minutes of each release. To receive each release without polling, subscribe to the gdp.created webhook.
To get started, please create an account and grab your API key at financialdatasets.ai.
You will use the API key to authenticate your API requests.
Coverage
| History | Series | Updated |
|---|---|---|
| Latest period | 12 | Quarterly and monthly |
Series
Quarterly:real_gdp_growth, real_gdp, nominal_gdp, consumer_spending_contribution, investment_contribution, net_exports_contribution, government_contribution, real_gdi_growth, corporate_profits. Monthly: personal_income, saving_rate, real_consumer_spending. Every series is seasonally adjusted. The full list is one free GET request away:
https://api.financialdatasets.ai/macro/gdp/series/
Reading the fields
dateis the reference period, not the release date: the first day of the quarter for quarterly series, the first day of the month for monthly series.valueis the published figure in the series’ units (percent, percentage points, billions of dollars at an annual rate).change_priorandchange_yeararevalueminus the prior period’s value and minus the value one year earlier, in the same units.change_year_pctis the year change as a percent, rounded to one decimal;nullfor series measured in percent or percentage points, whose change is stated in points.- A change is
nullwhen the comparison period was not published. - Each row carries its own
date.real_gdi_growthandcorporate_profitsare published with a later estimate of a quarter than the other quarterly series, so their row can be one quarter behind.
Getting Started
There are only 2 steps for making a successful API call:- Add your API key to the header of the request as
X-API-KEY. - Execute the API request. Add
seriesto get one series instead of all 12.
Example
GDP Snapshot
import requests
# add your API key to the headers
headers = {
"X-API-KEY": "your_api_key_here"
}
# create the URL
url = 'https://api.financialdatasets.ai/macro/gdp/snapshot'
# make API request
response = requests.get(url, headers=headers)
# parse the latest prints from the response
gdp = response.json().get('gdp')
Example Response
{
"gdp": [
{
"series": "real_gdp_growth",
"date": "2026-07-01",
"value": 3.4,
"change_prior": 1.2,
"change_year": -0.5,
"change_year_pct": null
},
{
"series": "real_gdp",
"date": "2026-07-01",
"value": 24611.077,
"change_prior": 203.066,
"change_year": 498.111,
"change_year_pct": 2.1
},
{
"series": "personal_income",
"date": "2026-09-01",
"value": 27707.845,
"change_prior": 54.473,
"change_year": 1102.935,
"change_year_pct": 4.1
}
]
}