Pricing Intelligence

Get latest pricing intelligence data

Changed on

Get the latest pricing intelligence data for all competitors in a project. Returns structured pricing plans, free tier availability, billing options, enterprise pricing, promotions, and competitive gap analysis. Every tracked competitor appears — rows without pricing data carry a pricingDataAvailable reason (no pricing page found, their page didn't respond, or a temporary problem on our side) instead of being omitted; branch on it before quoting pricing facts. A pricing page is the single most likely thing to be missing, so this is the dimension where the null contract matters most: when your own pricing couldn't be analyzed, every metric on summary.customer is null and pricingAnalysisAvailable says why. hasFreePlan: null means we did not check, NOT that there is no free plan — a measured false is reported as false and is a real finding. The three gap flags do NOT share one null condition, so read each field's own description rather than gating all three on the same test: all three are null when your side was unmeasured or no competitor was measured, and hasPriceGap is null on two further conditions the other two don't carry — fewer than three comparable competitor prices, or your own price not being comparable to the market. Market figures (marketAvgPrice, pricePositionPercent) are null below that three-price threshold, which is 'not enough market to average', never zero. Comparable means fixed monthly amounts sharing one currency AND one licensed unit: a per-seat price is never averaged against a flat one, marketPricingUnit says which group was chosen, and every market figure must be quoted with it. 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}/pricing

Request

  • Base URL: https://api.competlab.com
  • URL: https://api.competlab.com/v1/projects/{projectId}/pricing
  • 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": {
      "competitorsChecked": 6,
      "competitorsSuccessful": 5,
      "customer": {
        "domain": "yoursite.com",
        "popularPlanPrice": 49,
        "popularPlanCurrency": "USD",
        "popularPlanUnit": "flat",
        "popularPlanName": "Professional",
        "pricingModel": "per-seat",
        "hasFreeTrial": true,
        "freeTrialDuration": "14 days",
        "hasEnterprisePricing": true,
        "tierCount": 3,
        "pricingAnalysisAvailable": {
          "reason": "pricing_fetch_failed"
        }
      },
      "marketAvgPrice": 59,
      "marketCurrency": "USD",
      "marketPricingUnit": "flat",
      "pricePositionPercent": 45,
      "topPriceCompetitor": {
        "domain": "rival.com",
        "price": 99,
        "planName": "Enterprise"
      },
      "lowestPriceCompetitor": {
        "domain": "rival.com",
        "price": 99,
        "planName": "Enterprise"
      },
      "pricingSampleSize": 4,
      "pricingIsReliable": true,
      "competitorsWithFreePlan": 2,
      "competitorsWithFreeTrial": 4,
      "competitorsWithEnterprise": 3,
      "activePromotionCount": 1,
      "hasPriceGap": true,
      "hasPromotionAlert": true
    },
    "competitors": [
      {
        "domain": "competitor.com",
        "pricingUrl": "https://competitor.com/pricing",
        "pricingLocationType": "crawled",
        "content": {
          "pageTitle": "Acme Pricing - Plans for Every Team",
          "pageDescription": "Choose from flexible pricing plans starting at $9/month.",
          "mainHeadline": "Simple, Transparent Pricing",
          "pricingModel": "per-seat",
          "plans": [
            {
              "name": "Professional",
              "price": "$49/month",
              "summary": "Best for growing teams with advanced features"
            }
          ],
          "popularPlanName": "Professional",
          "hasFreePlan": true,
          "freePlanName": "Starter",
          "hasFreeTrial": true,
          "freeTrialDuration": "14 days",
          "billingCycleOffered": "monthly, annual",
          "annualDiscountAmount": "20%",
          "moneyBackGuarantee": "30-day money-back guarantee",
          "hasEnterpriseCustomPricing": true,
          "enterprisePlanCTA": "Contact Sales",
          "pricingPageFeatures": "Unlimited projects, Priority support, SSO"
        },
        "pricingDataAvailable": {
          "reason": "no_page_found"
        }
      }
    ]
  }
}

Changes

    • warning

      added the new not_found enum value to the / response property for the response 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's property type changed from object to string for status

    • breaking

      the /// response's property type changed from object to string for status

    • breaking

      the /////////// response's property type changed from object to string for status

    • breaking

      the /////////// response's property type changed from object to string for status

    • breaking

      the /////////// response's property type changed from object to string for status

    • breaking

      the /////////// response's property type changed from object to number for status

    • breaking

      the /////////// response's property type changed from object to string for status

    • breaking

      the ////// response's property type changed from object to number for status

    • breaking

      the ////// response's property type changed from object to string for status

    • breaking

      the ////// response's property type changed from object to number for status

    • warning

      added the new no_data_available enum value to the / response property for the response status

    • warning

      added the new run_not_summarized enum value to the / response property for the response 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

    • info

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