Get content intelligence data for a specific run
Changed onGet full content intelligence data for a specific historical monitoring run, including per-competitor URL counts, content categorization, and strategic URL metrics. Fields we could not measure are null, with a sibling availability object giving the reason; never read a null as zero, false or absent, and note that a measured 0 / false / empty list is reported as itself and is a real finding. A run that finished but produced no summary answers 404 run_not_summarized, which is a different fact from run_not_found: the run exists, it just has nothing to report. It used to answer 200 with an all-zero summary invented from the missing one.
Request
- Base URL: https://api.competlab.com
- URL: https://api.competlab.com/v1/projects/{projectId}/content/history/{runId}
- Auth: API key in header CL-API-Key
Path parameters
Run ID
Project ID
Response
Example response
{
"item": {
"runId": "507f1f77bcf86cd799439011",
"completedAt": "2026-03-15T10:00:00.000Z",
"summary": {
"sitemapsChecked": 8,
"sitemapsSuccessful": 7,
"customer": {
"domain": "yoursite.com",
"totalUrls": 350,
"strategicUrls": 280,
"categorizedCounts": {
"blog": 120,
"docs": 80,
"tools": 5,
"landing": 30,
"legal": 10,
"caseStudies": 0,
"comparison": 3,
"integrations": 25,
"changelog": 15,
"webinars": 2,
"other": 60
},
"contentAnalysisAvailable": {
"reason": "content_fetch_failed"
}
},
"topCompetitor": {
"domain": "rival.com",
"strategicUrls": 420
},
"strategicUrlGap": -140,
"overallRank": 3,
"comparableCompetitors": 4,
"criticalGaps": [
{
"category": "caseStudies",
"categoryLabel": "Case Studies",
"competitorsWithContent": 3,
"leader": {
"domain": "competitor.com",
"count": 42,
"exampleUrls": [
"https://competitor.com/blog/post-1",
"https://competitor.com/blog/post-2"
]
},
"actionHint": "Create 3-5 case studies showcasing customer success stories"
}
],
"significantGaps": [
{
"category": "blog",
"categoryLabel": "Blog Posts",
"customerCount": 5,
"competitorAverage": 25,
"competitorMax": 42,
"gapPercentage": 80,
"leader": {
"domain": "competitor.com",
"count": 42,
"exampleUrls": [
"https://competitor.com/blog/post-1",
"https://competitor.com/blog/post-2"
]
},
"actionHint": "Increase blog output to at least match competitor average of 25 posts"
}
],
"advantages": [
{
"category": "docs",
"categoryLabel": "Documentation",
"customerCount": 120,
"competitorMax": 45,
"leadAmount": 75
}
],
"onTrack": [
{
"category": "landing",
"categoryLabel": "Landing Pages",
"customerCount": 30,
"competitorMax": 35,
"differencePercent": -14
}
],
"totalCriticalGaps": 2,
"totalSignificantGaps": 1,
"totalAdvantages": 3,
"totalOnTrack": 4
},
"competitors": [
{
"domain": "competitor.com",
"totalUrls": 450,
"strategicUrls": 380,
"categorizedCounts": {
"blog": 150,
"docs": 100,
"tools": 10,
"landing": 10,
"caseStudies": 10,
"comparison": 10,
"integrations": 10,
"changelog": 10,
"webinars": 10,
"legal": 10,
"programmatic": 27996,
"other": 65
},
"programmaticExampleUrls": [
"https://competitor.com/ncm/01012100",
"https://competitor.com/cnae/0119-9-01",
"https://competitor.com/cfop/1101"
],
"sitemapCount": 2,
"contentDataAvailable": {
"reason": "no_sitemap_published"
}
}
]
}
}Changes
- warning
added the new
not_foundenum value to the/response property for the response status
- warning
- info
added the required property
///to the response with the status
- info