Content Intelligence

Get content intelligence run history

Changed on

Get paginated history of content intelligence monitoring runs for a project. Each entry includes run timing and summary statistics with gap analysis. 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.

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

Request

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

Path parameters

projectIdstring required
Example:507f1f77bcf86cd799439011

Project ID

Query parameters

pagenumber
Example:1

Page number (1-indexed)

limitnumber
Example:20

Number of items per page

Response

Example response

{
  "items": [
    {
      "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
      }
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 47,
    "totalPages": 3,
    "hasMore": true
  }
}

Changes

    • 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 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

    • info

      for the path request parameter projectId, the type was generalized from no type to string

    • info

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