Content Intelligence

Get latest content intelligence data

Changed on

Get the latest content intelligence data for all competitors in a project. Returns URL counts, content categorization, strategic URL analysis, and competitive gap assessment. Use this to understand the content landscape across competitors. 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. The four gap lists carry a distinction worth respecting: a null list means no comparison ran, while an EMPTY list means we compared and found none — reading the first as the second reports a verdict about a comparison that never happened. A project with no completed run for this dimension yet answers 404 no_data_available — not a missing project and not a failed measurement, just nothing measured here so far; the project itself is fine and get_project still describes it. Distinguish it from project_not_found, which means the id is wrong.

get/v1/projects/{projectId}/content

Request

  • Base URL: https://api.competlab.com
  • URL: https://api.competlab.com/v1/projects/{projectId}/content
  • Auth: API key in header CL-API-Key

Path parameters

projectIdstring required
Example:507f1f77bcf86cd799439011

Project ID

Response

Example response

{
  "item": {
    "lastUpdatedAt": "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