curl --request GET \
--url https://api.parallellabs.app/api/v0/seo/projects/{projectId} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.parallellabs.app/api/v0/seo/projects/{projectId}"
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.parallellabs.app/api/v0/seo/projects/{projectId}', 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.parallellabs.app/api/v0/seo/projects/{projectId}",
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.parallellabs.app/api/v0/seo/projects/{projectId}"
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.parallellabs.app/api/v0/seo/projects/{projectId}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/seo/projects/{projectId}")
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{
"id": "<string>",
"companyId": "<string>",
"domain": "<string>",
"name": "<string>",
"status": "active",
"frequency": "manual",
"timezone": "<string>",
"nextRunAt": "2023-11-07T05:31:56Z",
"lastRunAt": "2023-11-07T05:31:56Z",
"runCount": 123,
"enabledModules": {},
"trackedKeywords": [
"<string>"
],
"competitorDomains": [
"<string>"
],
"trackedPrompts": [
"<string>"
],
"brandNames": [
"<string>"
],
"aiPlatforms": {},
"trackAiOverview": true,
"backlinksMaxLinks": 123,
"auditMaxPages": 123,
"country": "<string>",
"language": "<string>",
"created_date": "2023-11-07T05:31:56Z",
"updated_date": "2023-11-07T05:31:56Z",
"latestAudit": {
"id": "<string>",
"domain": "<string>",
"startUrl": "<string>",
"status": "queued",
"error": "<string>",
"maxPages": 123,
"pagesCrawled": 123,
"healthScore": 123,
"issueCounts": {},
"issueSummary": [
{
"id": "<string>",
"severity": "<string>",
"label": "<string>",
"pageCount": 123
}
],
"linksChecked": 123,
"brokenLinkCount": 123,
"avgResponseMs": 123,
"aiReadinessScore": 123,
"aiReadinessGrade": "<string>",
"aiReadinessChecks": {},
"aiReadinessRecommendations": [
{}
],
"aiReadinessCheckedAt": "2023-11-07T05:31:56Z",
"aiReadinessError": "<string>",
"startedAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"created_date": "2023-11-07T05:31:56Z"
},
"backlinkHistory": [
{
"id": "<string>",
"runId": "<string>",
"totalBacklinks": 123,
"referringDomains": 123,
"referringMainDomains": 123,
"domainRank": 123,
"newCount": 123,
"lostCount": 123,
"brokenCount": 123,
"fullPull": true,
"checkedAt": "2023-11-07T05:31:56Z"
}
],
"rankHistory": [
{
"id": "<string>",
"runId": "<string>",
"keyword": "<string>",
"country": "<string>",
"language": "<string>",
"position": 123,
"url": "<string>",
"previousPosition": 123,
"checkedAt": "2023-11-07T05:31:56Z"
}
],
"opportunities": {
"id": "<string>",
"runId": "<string>",
"rankedKeywords": [
{}
],
"keywordIdeas": [
{}
],
"rankedCount": 123,
"ideaCount": 123,
"checkedAt": "2023-11-07T05:31:56Z"
},
"competitors": {
"id": "<string>",
"runId": "<string>",
"competitors": [
{}
],
"competitorCount": 123,
"linkGap": [
{}
],
"linkGapCount": 123,
"checkedAt": "2023-11-07T05:31:56Z"
},
"linkProfile": {
"id": "<string>",
"runId": "<string>",
"anchors": [
{}
],
"referringDomains": [
{}
],
"backlinkHistory": [
{}
],
"anchorCount": 123,
"referringDomainCount": 123,
"checkedAt": "2023-11-07T05:31:56Z"
},
"lighthouse": {
"id": "<string>",
"runId": "<string>",
"url": "<string>",
"device": "<string>",
"performanceScore": 123,
"accessibilityScore": 123,
"bestPracticesScore": 123,
"seoScore": 123,
"agenticBrowsingScore": 123,
"vitals": {},
"failingAudits": [
{}
],
"opportunities": [
{}
],
"passingAudits": [
{}
],
"lighthouseVersion": "<string>",
"error": "<string>",
"checkedAt": "2023-11-07T05:31:56Z"
},
"aiVisibility": {
"summary": {
"answers": 123,
"visibilityScore": 123,
"citationScore": 123,
"shareOfVoice": 123,
"brandMentions": 123,
"domainCitations": 123,
"competitorMentions": 123
},
"topCitedDomains": [
{}
],
"answers": [
{
"id": "<string>",
"runId": "<string>",
"platform": "<string>",
"model": "<string>",
"prompt": "<string>",
"brandMentioned": true,
"brandPosition": 123,
"domainCited": true,
"citationCount": 123,
"competitorsMentioned": [
"<string>"
],
"citations": [
{}
],
"answerExcerpt": "<string>",
"error": "<string>",
"checkedAt": "2023-11-07T05:31:56Z"
}
]
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}One project plus its latest per-module results.
curl --request GET \
--url https://api.parallellabs.app/api/v0/seo/projects/{projectId} \
--header 'X-API-Key: <api-key>'import requests
url = "https://api.parallellabs.app/api/v0/seo/projects/{projectId}"
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.parallellabs.app/api/v0/seo/projects/{projectId}', 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.parallellabs.app/api/v0/seo/projects/{projectId}",
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.parallellabs.app/api/v0/seo/projects/{projectId}"
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.parallellabs.app/api/v0/seo/projects/{projectId}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parallellabs.app/api/v0/seo/projects/{projectId}")
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{
"id": "<string>",
"companyId": "<string>",
"domain": "<string>",
"name": "<string>",
"status": "active",
"frequency": "manual",
"timezone": "<string>",
"nextRunAt": "2023-11-07T05:31:56Z",
"lastRunAt": "2023-11-07T05:31:56Z",
"runCount": 123,
"enabledModules": {},
"trackedKeywords": [
"<string>"
],
"competitorDomains": [
"<string>"
],
"trackedPrompts": [
"<string>"
],
"brandNames": [
"<string>"
],
"aiPlatforms": {},
"trackAiOverview": true,
"backlinksMaxLinks": 123,
"auditMaxPages": 123,
"country": "<string>",
"language": "<string>",
"created_date": "2023-11-07T05:31:56Z",
"updated_date": "2023-11-07T05:31:56Z",
"latestAudit": {
"id": "<string>",
"domain": "<string>",
"startUrl": "<string>",
"status": "queued",
"error": "<string>",
"maxPages": 123,
"pagesCrawled": 123,
"healthScore": 123,
"issueCounts": {},
"issueSummary": [
{
"id": "<string>",
"severity": "<string>",
"label": "<string>",
"pageCount": 123
}
],
"linksChecked": 123,
"brokenLinkCount": 123,
"avgResponseMs": 123,
"aiReadinessScore": 123,
"aiReadinessGrade": "<string>",
"aiReadinessChecks": {},
"aiReadinessRecommendations": [
{}
],
"aiReadinessCheckedAt": "2023-11-07T05:31:56Z",
"aiReadinessError": "<string>",
"startedAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"created_date": "2023-11-07T05:31:56Z"
},
"backlinkHistory": [
{
"id": "<string>",
"runId": "<string>",
"totalBacklinks": 123,
"referringDomains": 123,
"referringMainDomains": 123,
"domainRank": 123,
"newCount": 123,
"lostCount": 123,
"brokenCount": 123,
"fullPull": true,
"checkedAt": "2023-11-07T05:31:56Z"
}
],
"rankHistory": [
{
"id": "<string>",
"runId": "<string>",
"keyword": "<string>",
"country": "<string>",
"language": "<string>",
"position": 123,
"url": "<string>",
"previousPosition": 123,
"checkedAt": "2023-11-07T05:31:56Z"
}
],
"opportunities": {
"id": "<string>",
"runId": "<string>",
"rankedKeywords": [
{}
],
"keywordIdeas": [
{}
],
"rankedCount": 123,
"ideaCount": 123,
"checkedAt": "2023-11-07T05:31:56Z"
},
"competitors": {
"id": "<string>",
"runId": "<string>",
"competitors": [
{}
],
"competitorCount": 123,
"linkGap": [
{}
],
"linkGapCount": 123,
"checkedAt": "2023-11-07T05:31:56Z"
},
"linkProfile": {
"id": "<string>",
"runId": "<string>",
"anchors": [
{}
],
"referringDomains": [
{}
],
"backlinkHistory": [
{}
],
"anchorCount": 123,
"referringDomainCount": 123,
"checkedAt": "2023-11-07T05:31:56Z"
},
"lighthouse": {
"id": "<string>",
"runId": "<string>",
"url": "<string>",
"device": "<string>",
"performanceScore": 123,
"accessibilityScore": 123,
"bestPracticesScore": 123,
"seoScore": 123,
"agenticBrowsingScore": 123,
"vitals": {},
"failingAudits": [
{}
],
"opportunities": [
{}
],
"passingAudits": [
{}
],
"lighthouseVersion": "<string>",
"error": "<string>",
"checkedAt": "2023-11-07T05:31:56Z"
},
"aiVisibility": {
"summary": {
"answers": 123,
"visibilityScore": 123,
"citationScore": 123,
"shareOfVoice": 123,
"brandMentions": 123,
"domainCitations": 123,
"competitorMentions": 123
},
"topCitedDomains": [
{}
],
"answers": [
{
"id": "<string>",
"runId": "<string>",
"platform": "<string>",
"model": "<string>",
"prompt": "<string>",
"brandMentioned": true,
"brandPosition": 123,
"domainCited": true,
"citationCount": 123,
"competitorsMentioned": [
"<string>"
],
"citations": [
{}
],
"answerExcerpt": "<string>",
"error": "<string>",
"checkedAt": "2023-11-07T05:31:56Z"
}
]
}
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Company API key - scoped to a specific company. Generate from the Integrations page in your dashboard.
Path Parameters
Query Parameters
Company ID that owns the SEO data
Response
The project and every module's latest result
The project plus the latest result of every module
Project ID (UUID)
Company ID
Monitored host, lowercased
Display name
active or paused
active, paused manual, daily, weekly or monthly
manual, daily, weekly, monthly Schedule timezone
Next scheduled run (null when manual/paused)
Last run
Runs so far
Module key -> enabled. Keys: keyword_research, domain_overview, opportunities, backlinks, link_profile, rank_tracking, competitors, ai_visibility, site_audit, lighthouse
Keywords for rank tracking and keyword research
Pinned competitor domains
Questions asked of AI platforms (AEO)
Strings that count as a brand mention
AI platform key -> enabled (chatgpt, claude, gemini, perplexity)
Also check Google AI Overview
Backlinks pulled per run (billed per link)
Pages crawled per scheduled site audit
Market country code, e.g. us
Language code, e.g. en
Latest scheduled site audit, or null
Show child attributes
Show child attributes
Newest first
Show child attributes
Show child attributes
Newest first
Show child attributes
Show child attributes
Keywords the domain ranks for plus new ideas, on one run
Show child attributes
Show child attributes
Organic competitors and backlink gap on one run
Show child attributes
Show child attributes
Anchor text, referring domains and vendor backlink history on one run
Show child attributes
Show child attributes
One Lighthouse scan of the home page: category scores 0-100 (including agenticBrowsingScore, Lighthouse's AI-agent readiness / AEO category: llms.txt, agent accessibility tree, WebMCP), Core Web Vitals lab metrics (ms except CLS) and the audits that did not pass.
Show child attributes
Show child attributes
Latest AEO run
Show child attributes
Show child attributes

