Get Insight Sentiment Over Time
curl --request POST \
--url https://api.birdeye.com/resources/v1/insight/sentiment/over-time \
--header 'Content-Type: application/json' \
--data '
{
"reviewSources": [
"Google",
"Facebook",
"CitySearch"
],
"ratings": [
"0",
"1",
"3",
"4",
"5"
],
"businessNumbers": [
172957184851864,
174436684666401
],
"startDate": "02/25/2025",
"endDate": "02/01/2026",
"hierarchyNodeData": [
{
"levelId": "Region",
"levelNames": [
"Region1",
"Region2"
]
}
],
"groupBy": "month"
}
'import requests
url = "https://api.birdeye.com/resources/v1/insight/sentiment/over-time"
payload = {
"reviewSources": ["Google", "Facebook", "CitySearch"],
"ratings": ["0", "1", "3", "4", "5"],
"businessNumbers": [172957184851864, 174436684666401],
"startDate": "02/25/2025",
"endDate": "02/01/2026",
"hierarchyNodeData": [
{
"levelId": "Region",
"levelNames": ["Region1", "Region2"]
}
],
"groupBy": "month"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
reviewSources: ['Google', 'Facebook', 'CitySearch'],
ratings: ['0', '1', '3', '4', '5'],
businessNumbers: [172957184851864, 174436684666401],
startDate: '02/25/2025',
endDate: '02/01/2026',
hierarchyNodeData: [{levelId: 'Region', levelNames: ['Region1', 'Region2']}],
groupBy: 'month'
})
};
fetch('https://api.birdeye.com/resources/v1/insight/sentiment/over-time', 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.birdeye.com/resources/v1/insight/sentiment/over-time",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'reviewSources' => [
'Google',
'Facebook',
'CitySearch'
],
'ratings' => [
'0',
'1',
'3',
'4',
'5'
],
'businessNumbers' => [
172957184851864,
174436684666401
],
'startDate' => '02/25/2025',
'endDate' => '02/01/2026',
'hierarchyNodeData' => [
[
'levelId' => 'Region',
'levelNames' => [
'Region1',
'Region2'
]
]
],
'groupBy' => 'month'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.birdeye.com/resources/v1/insight/sentiment/over-time"
payload := strings.NewReader("{\n \"reviewSources\": [\n \"Google\",\n \"Facebook\",\n \"CitySearch\"\n ],\n \"ratings\": [\n \"0\",\n \"1\",\n \"3\",\n \"4\",\n \"5\"\n ],\n \"businessNumbers\": [\n 172957184851864,\n 174436684666401\n ],\n \"startDate\": \"02/25/2025\",\n \"endDate\": \"02/01/2026\",\n \"hierarchyNodeData\": [\n {\n \"levelId\": \"Region\",\n \"levelNames\": [\n \"Region1\",\n \"Region2\"\n ]\n }\n ],\n \"groupBy\": \"month\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.birdeye.com/resources/v1/insight/sentiment/over-time")
.header("Content-Type", "application/json")
.body("{\n \"reviewSources\": [\n \"Google\",\n \"Facebook\",\n \"CitySearch\"\n ],\n \"ratings\": [\n \"0\",\n \"1\",\n \"3\",\n \"4\",\n \"5\"\n ],\n \"businessNumbers\": [\n 172957184851864,\n 174436684666401\n ],\n \"startDate\": \"02/25/2025\",\n \"endDate\": \"02/01/2026\",\n \"hierarchyNodeData\": [\n {\n \"levelId\": \"Region\",\n \"levelNames\": [\n \"Region1\",\n \"Region2\"\n ]\n }\n ],\n \"groupBy\": \"month\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.birdeye.com/resources/v1/insight/sentiment/over-time")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"reviewSources\": [\n \"Google\",\n \"Facebook\",\n \"CitySearch\"\n ],\n \"ratings\": [\n \"0\",\n \"1\",\n \"3\",\n \"4\",\n \"5\"\n ],\n \"businessNumbers\": [\n 172957184851864,\n 174436684666401\n ],\n \"startDate\": \"02/25/2025\",\n \"endDate\": \"02/01/2026\",\n \"hierarchyNodeData\": [\n {\n \"levelId\": \"Region\",\n \"levelNames\": [\n \"Region1\",\n \"Region2\"\n ]\n }\n ],\n \"groupBy\": \"month\"\n}"
response = http.request(request)
puts response.read_body{
"groupByType": "month",
"dataPoints": [
{
"startDate": "05/01/2026",
"endDate": "05/31/2026",
"label": "May 2026",
"shortLabel": "May '26",
"mentions": 340,
"score": 90
},
{
"startDate": "06/01/2026",
"endDate": "06/30/2026",
"label": "Jun 2026",
"shortLabel": "Jun '26",
"mentions": 298,
"score": 92.5
}
]
}{
"code": 2003,
"message": "Invalid groupBy value: 'fortnight'. Valid values are: DAY, WEEK, MONTH, QUARTER, YEAR"
}{
"code": 1167,
"message": "API key is missing"
}{
"code": 2151,
"message": "Not a valid reseller/enterprise id."
}{
"code": 1027,
"message": "Invalid business number."
}Insight AI
Insight Sentiment Over Time
The Insight Sentiment Over Time API provides a time-series view of sentiment scores and mention counts at the account level, aggregated across configurable time intervals — day, week, month, quarter, or year — enabling trend analysis over custom date ranges.
POST
/
v1
/
insight
/
sentiment
/
over-time
Get Insight Sentiment Over Time
curl --request POST \
--url https://api.birdeye.com/resources/v1/insight/sentiment/over-time \
--header 'Content-Type: application/json' \
--data '
{
"reviewSources": [
"Google",
"Facebook",
"CitySearch"
],
"ratings": [
"0",
"1",
"3",
"4",
"5"
],
"businessNumbers": [
172957184851864,
174436684666401
],
"startDate": "02/25/2025",
"endDate": "02/01/2026",
"hierarchyNodeData": [
{
"levelId": "Region",
"levelNames": [
"Region1",
"Region2"
]
}
],
"groupBy": "month"
}
'import requests
url = "https://api.birdeye.com/resources/v1/insight/sentiment/over-time"
payload = {
"reviewSources": ["Google", "Facebook", "CitySearch"],
"ratings": ["0", "1", "3", "4", "5"],
"businessNumbers": [172957184851864, 174436684666401],
"startDate": "02/25/2025",
"endDate": "02/01/2026",
"hierarchyNodeData": [
{
"levelId": "Region",
"levelNames": ["Region1", "Region2"]
}
],
"groupBy": "month"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
reviewSources: ['Google', 'Facebook', 'CitySearch'],
ratings: ['0', '1', '3', '4', '5'],
businessNumbers: [172957184851864, 174436684666401],
startDate: '02/25/2025',
endDate: '02/01/2026',
hierarchyNodeData: [{levelId: 'Region', levelNames: ['Region1', 'Region2']}],
groupBy: 'month'
})
};
fetch('https://api.birdeye.com/resources/v1/insight/sentiment/over-time', 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.birdeye.com/resources/v1/insight/sentiment/over-time",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'reviewSources' => [
'Google',
'Facebook',
'CitySearch'
],
'ratings' => [
'0',
'1',
'3',
'4',
'5'
],
'businessNumbers' => [
172957184851864,
174436684666401
],
'startDate' => '02/25/2025',
'endDate' => '02/01/2026',
'hierarchyNodeData' => [
[
'levelId' => 'Region',
'levelNames' => [
'Region1',
'Region2'
]
]
],
'groupBy' => 'month'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.birdeye.com/resources/v1/insight/sentiment/over-time"
payload := strings.NewReader("{\n \"reviewSources\": [\n \"Google\",\n \"Facebook\",\n \"CitySearch\"\n ],\n \"ratings\": [\n \"0\",\n \"1\",\n \"3\",\n \"4\",\n \"5\"\n ],\n \"businessNumbers\": [\n 172957184851864,\n 174436684666401\n ],\n \"startDate\": \"02/25/2025\",\n \"endDate\": \"02/01/2026\",\n \"hierarchyNodeData\": [\n {\n \"levelId\": \"Region\",\n \"levelNames\": [\n \"Region1\",\n \"Region2\"\n ]\n }\n ],\n \"groupBy\": \"month\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.birdeye.com/resources/v1/insight/sentiment/over-time")
.header("Content-Type", "application/json")
.body("{\n \"reviewSources\": [\n \"Google\",\n \"Facebook\",\n \"CitySearch\"\n ],\n \"ratings\": [\n \"0\",\n \"1\",\n \"3\",\n \"4\",\n \"5\"\n ],\n \"businessNumbers\": [\n 172957184851864,\n 174436684666401\n ],\n \"startDate\": \"02/25/2025\",\n \"endDate\": \"02/01/2026\",\n \"hierarchyNodeData\": [\n {\n \"levelId\": \"Region\",\n \"levelNames\": [\n \"Region1\",\n \"Region2\"\n ]\n }\n ],\n \"groupBy\": \"month\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.birdeye.com/resources/v1/insight/sentiment/over-time")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"reviewSources\": [\n \"Google\",\n \"Facebook\",\n \"CitySearch\"\n ],\n \"ratings\": [\n \"0\",\n \"1\",\n \"3\",\n \"4\",\n \"5\"\n ],\n \"businessNumbers\": [\n 172957184851864,\n 174436684666401\n ],\n \"startDate\": \"02/25/2025\",\n \"endDate\": \"02/01/2026\",\n \"hierarchyNodeData\": [\n {\n \"levelId\": \"Region\",\n \"levelNames\": [\n \"Region1\",\n \"Region2\"\n ]\n }\n ],\n \"groupBy\": \"month\"\n}"
response = http.request(request)
puts response.read_body{
"groupByType": "month",
"dataPoints": [
{
"startDate": "05/01/2026",
"endDate": "05/31/2026",
"label": "May 2026",
"shortLabel": "May '26",
"mentions": 340,
"score": 90
},
{
"startDate": "06/01/2026",
"endDate": "06/30/2026",
"label": "Jun 2026",
"shortLabel": "Jun '26",
"mentions": 298,
"score": 92.5
}
]
}{
"code": 2003,
"message": "Invalid groupBy value: 'fortnight'. Valid values are: DAY, WEEK, MONTH, QUARTER, YEAR"
}{
"code": 1167,
"message": "API key is missing"
}{
"code": 2151,
"message": "Not a valid reseller/enterprise id."
}{
"code": 1027,
"message": "Invalid business number."
}Headers
e.g. application/json
e.g. [Required] Partner specific API key provided by Birdeye for data exchange.
e.g. [Required] User associated businessNumber.
Media type of the JSON request body.
Body
application/json
List of business numbers (max 100).
Start date in MM/DD/YYYY format.
End date in MM/DD/YYYY format.
Review sources to include (e.g. Google, Facebook).
Rating values to filter (e.g. "1", "2", "3", "4", "5").
List of hierarchy nodes to filter by level.
Show child attributes
Show child attributes
Time interval to group results by.
Available options:
day, week, month, quarter, year