curl --request POST \
--url https://api.birdeye.com/resources/v1/competitors/review/metrics \
--header 'Content-Type: application/json' \
--data '
{
"businessNumbers": [],
"fromDate": "04/01/2024",
"toDate": "08/03/2025",
"sources": [],
"brandIds": [],
"competitorLocationIds": []
}
'import requests
url = "https://api.birdeye.com/resources/v1/competitors/review/metrics"
payload = {
"businessNumbers": [],
"fromDate": "04/01/2024",
"toDate": "08/03/2025",
"sources": [],
"brandIds": [],
"competitorLocationIds": []
}
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({
businessNumbers: [],
fromDate: '04/01/2024',
toDate: '08/03/2025',
sources: [],
brandIds: [],
competitorLocationIds: []
})
};
fetch('https://api.birdeye.com/resources/v1/competitors/review/metrics', 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/competitors/review/metrics",
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([
'businessNumbers' => [
],
'fromDate' => '04/01/2024',
'toDate' => '08/03/2025',
'sources' => [
],
'brandIds' => [
],
'competitorLocationIds' => [
]
]),
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/competitors/review/metrics"
payload := strings.NewReader("{\n \"businessNumbers\": [],\n \"fromDate\": \"04/01/2024\",\n \"toDate\": \"08/03/2025\",\n \"sources\": [],\n \"brandIds\": [],\n \"competitorLocationIds\": []\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/competitors/review/metrics")
.header("Content-Type", "application/json")
.body("{\n \"businessNumbers\": [],\n \"fromDate\": \"04/01/2024\",\n \"toDate\": \"08/03/2025\",\n \"sources\": [],\n \"brandIds\": [],\n \"competitorLocationIds\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.birdeye.com/resources/v1/competitors/review/metrics")
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 \"businessNumbers\": [],\n \"fromDate\": \"04/01/2024\",\n \"toDate\": \"08/03/2025\",\n \"sources\": [],\n \"brandIds\": [],\n \"competitorLocationIds\": []\n}"
response = http.request(request)
puts response.read_body[
{
"businessLocations": [
{
"businessId": 100031493,
"name": "Dieci Lifestyle Spa1",
"alias": "ST",
"businessNumber": 157984189025195,
"phone": "(973) 716-0102",
"address": "90 W Mount Pleasant Ave"
}
],
"competitorLocation": "Nuvia Dental Implant Center",
"competitorBrand": "Nuvia Dental Implant Center",
"source": "Google",
"overallRating": 4.9,
"reviewCount": 1654
},
{
"businessLocations": [
{
"businessId": 100031493,
"name": "Dieci Lifestyle Spa1",
"alias": "ST",
"businessNumber": 157984189025195,
"phone": "(973) 716-0102",
"address": "90 W Mount Pleasant Ave"
}
],
"competitorLocation": "Aspen Dental - El Paso, TX",
"competitorBrand": "Aspen Dental - El Paso, TX - 79912",
"source": "Google",
"overallRating": 4.7,
"reviewCount": 21
},
{
"businessLocations": [
{
"businessId": 100033957,
"name": "Raghav_l",
"businessNumber": 159116903548016,
"phone": "(202) 555-0175"
}
],
"competitorLocation": "Monroe Dental Office",
"competitorBrand": "Monroe Dental Office - 10950",
"source": "Google",
"overallRating": 4.9,
"reviewCount": 740
}
]{
"code": 1161,
"message": "Invalid API key"
}{
"code": 1011,
"message": "Business id is invalid"
}{
"code": 89,
"message": "Rate limit exceeded"
}Retrieve Competitor Review Metrics
This API retrieves competitor metrics review data (average rating and total reviews) for specified business numbers and date ranges.
curl --request POST \
--url https://api.birdeye.com/resources/v1/competitors/review/metrics \
--header 'Content-Type: application/json' \
--data '
{
"businessNumbers": [],
"fromDate": "04/01/2024",
"toDate": "08/03/2025",
"sources": [],
"brandIds": [],
"competitorLocationIds": []
}
'import requests
url = "https://api.birdeye.com/resources/v1/competitors/review/metrics"
payload = {
"businessNumbers": [],
"fromDate": "04/01/2024",
"toDate": "08/03/2025",
"sources": [],
"brandIds": [],
"competitorLocationIds": []
}
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({
businessNumbers: [],
fromDate: '04/01/2024',
toDate: '08/03/2025',
sources: [],
brandIds: [],
competitorLocationIds: []
})
};
fetch('https://api.birdeye.com/resources/v1/competitors/review/metrics', 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/competitors/review/metrics",
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([
'businessNumbers' => [
],
'fromDate' => '04/01/2024',
'toDate' => '08/03/2025',
'sources' => [
],
'brandIds' => [
],
'competitorLocationIds' => [
]
]),
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/competitors/review/metrics"
payload := strings.NewReader("{\n \"businessNumbers\": [],\n \"fromDate\": \"04/01/2024\",\n \"toDate\": \"08/03/2025\",\n \"sources\": [],\n \"brandIds\": [],\n \"competitorLocationIds\": []\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/competitors/review/metrics")
.header("Content-Type", "application/json")
.body("{\n \"businessNumbers\": [],\n \"fromDate\": \"04/01/2024\",\n \"toDate\": \"08/03/2025\",\n \"sources\": [],\n \"brandIds\": [],\n \"competitorLocationIds\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.birdeye.com/resources/v1/competitors/review/metrics")
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 \"businessNumbers\": [],\n \"fromDate\": \"04/01/2024\",\n \"toDate\": \"08/03/2025\",\n \"sources\": [],\n \"brandIds\": [],\n \"competitorLocationIds\": []\n}"
response = http.request(request)
puts response.read_body[
{
"businessLocations": [
{
"businessId": 100031493,
"name": "Dieci Lifestyle Spa1",
"alias": "ST",
"businessNumber": 157984189025195,
"phone": "(973) 716-0102",
"address": "90 W Mount Pleasant Ave"
}
],
"competitorLocation": "Nuvia Dental Implant Center",
"competitorBrand": "Nuvia Dental Implant Center",
"source": "Google",
"overallRating": 4.9,
"reviewCount": 1654
},
{
"businessLocations": [
{
"businessId": 100031493,
"name": "Dieci Lifestyle Spa1",
"alias": "ST",
"businessNumber": 157984189025195,
"phone": "(973) 716-0102",
"address": "90 W Mount Pleasant Ave"
}
],
"competitorLocation": "Aspen Dental - El Paso, TX",
"competitorBrand": "Aspen Dental - El Paso, TX - 79912",
"source": "Google",
"overallRating": 4.7,
"reviewCount": 21
},
{
"businessLocations": [
{
"businessId": 100033957,
"name": "Raghav_l",
"businessNumber": 159116903548016,
"phone": "(202) 555-0175"
}
],
"competitorLocation": "Monroe Dental Office",
"competitorBrand": "Monroe Dental Office - 10950",
"source": "Google",
"overallRating": 4.9,
"reviewCount": 740
}
]{
"code": 1161,
"message": "Invalid API key"
}{
"code": 1011,
"message": "Business id is invalid"
}{
"code": 89,
"message": "Rate limit exceeded"
}Headers
e.g. application/json
e.g. [Required] Partner specific API key provided by Birdeye for data exchange.
e.g. [Required] User assosiated businessNumber
Media type of the JSON request body.
Query Parameters
The starting index for pagination (0-based). Default is 0.
Number of records to return per page (max recommended: 100). Default is 25.
Sort order: 0 = Ascending, 1 = Descending order of review date. Default is 0.
Body
Location numbers of enterprise locations. If empty all valid enterprise locations will be selected.
Start date for the analysis period.
End date for the analysis period.
Aggregation sources.
Filter by specific competitor brand IDs. Maximum 5 brand IDs are allowed.
Filter by specific competitor location IDs.
Response
OK
The list of business locations being analyzed
Show child attributes
Show child attributes
The name of the competitor location where the review was left
The brand name or identifier of the competitor
The review platform/source where the review was published
The average rating for this competitor location on this specific source
The total number of reviews for this competitor location on this specific source