Get positioning data for a specific run
Changed onGet full positioning data for a specific historical monitoring run, including per-competitor homepage messaging, value propositions, CTAs, and audience data. 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}/positioning/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": {
"competitorsChecked": 6,
"competitorsSuccessful": 5,
"customer": {
"domain": "yoursite.com",
"messagingStrengthScore": 72,
"hasSpecificHeadline": true,
"hasStrongCta": true,
"hasFreeTrial": true,
"primaryCta": "Start Free Trial",
"mainHeadline": "Ship Projects 10x Faster",
"messagingAnalysisAvailable": {
"reason": "homepage_fetch_failed"
}
},
"topMessagingCompetitor": {
"domain": "rival.com",
"messagingStrengthScore": 88,
"primaryCta": "Try It Free",
"mainHeadline": "The Future of Work"
},
"ctaComparison": {
"yourCta": "Start Free Trial",
"strongestCompetitorCta": "Get Started — It's Free",
"strongestCompetitorDomain": "rival.com"
},
"pricingComparison": {
"competitorsShowingPrice": 3,
"competitorsWithFreeTrial": 4,
"youHaveFreeTrial": true
},
"messagingScoreGap": -16
},
"competitors": [
{
"domain": "competitor.com",
"homepageUrl": "https://competitor.com",
"content": {
"pageTitle": "Acme - The #1 Project Management Tool",
"pageDescription": "Manage projects, track tasks, and collaborate with your team.",
"mainHeadline": "Ship Projects 10x Faster",
"tagline": "The all-in-one platform for modern teams",
"valueProposition": "Streamline your workflow with AI-powered project management",
"primaryCTA": "Start Free Trial",
"secondaryCTA": "Book a Demo",
"keyOfferings": [
"Task Management",
"Time Tracking",
"Team Collaboration"
],
"targetAudience": "Product teams and agencies",
"mainDifferentiator": "AI-powered automation that saves 5 hours per week",
"pricingMentioned": true,
"startingPrice": "$9/month",
"hasFreeTrial": true,
"freeTrialDuration": "14 days"
}
}
]
}
}Changes
- warning
added the new
not_foundenum value to the/response property for the response status
- warning
- breaking
the response property
///////////became nullable for the status - breaking
the response property
///////////became nullable for the status - breaking
the response property
///////////became nullable for the status - breaking
the response property
///////////became nullable for the status - breaking
the response property
///////////became nullable for the status - breaking
the response property
///////////became nullable for the status - breaking
the response property
//////became nullable for the status - breaking
the
///////////response's property type changed fromobjecttostringfor status - breaking
the
///////////response's property type changed fromobjecttonumberfor status - breaking
the
///////////response's property type changed fromobjecttobooleanfor status - breaking
the
///////////response's property type changed fromobjecttobooleanfor status - warning
added the new
no_data_availableenum value to the/response property for the response status - warning
added the new
run_not_summarizedenum value to the/response property for the response status - info
for the
pathrequest parameterprojectId, the type was generalized from no type tostring
- breaking