Content Intelligence

Get content intelligence data for a specific run

Changed on

Get 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.

get/v1/projects/{projectId}/content/history/{runId}

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

runIdstring required
Example:507f1f77bcf86cd799439012

Run ID

projectIdstring required
Example:507f1f77bcf86cd799439011

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_found enum value to the / response property for the response status

    • info

      added the required property /// to the response with the status