API Documentation

The SAASALE API gives you programmatic access to our database of SaaS projects for sale. Use it to build integrations, dashboards, or automated deal-flow pipelines.

Authentication

All API requests require an API key passed via the X-API-Key header. Generate your key on the Developer Dashboard.

curl -H "X-API-Key: sk_live_your_key_here" \
  https://saas-marketplace-ecru.vercel.app/api/v1/projects

Rate Limiting

The API is rate-limited to 20 requests per minute per API key. Rate limit status is returned in response headers:

HeaderDescription
X-RateLimit-LimitMaximum requests per window (20)
X-RateLimit-RemainingRemaining requests in current window
X-RateLimit-ResetUnix timestamp (ms) when the window resets

Tiers

TierPriceIncludes
free$0Project listings, financials, metadata
pro$29/moEverything in Free + Deal Score, AI metrics, confidence scores

Every response includes a _tier field indicating your current tier. Pro-only fields appear under the scoring object.

Pagination

List endpoints return paginated results. Use page and limit query parameters.

ParameterDefaultMaxDescription
page1-Page number
limit20100Results per page

GET /api/v1/projects

Returns a paginated list of SaaS projects for sale.

Query Parameters

ParameterTypeDescription
pagenumberPage number (default: 1)
limitnumberResults per page (default: 20, max: 100)
categorystringFilter by category
minPricenumberMinimum asking price
maxPricenumberMaximum asking price
minRevenuenumberMinimum monthly revenue
maxRevenuenumberMaximum monthly revenue
sortstringprice-asc, price-desc, revenue-desc, listed-desc

Example Request

curl -H "X-API-Key: sk_live_your_key_here" \
  "https://saas-marketplace-ecru.vercel.app/api/v1/projects?limit=2&sort=revenue-desc"

Example Response

{
  "data": [
    {
      "id": 42,
      "name": "InvoiceBot",
      "domain": "invoicebot.io",
      "slug": "invoicebot-io",
      "description": "Automated invoicing SaaS for freelancers",
      "category": "Finance",
      "asking_price": 45000,
      "mrr_at_discovery": 1200,
      "revenue_last30d": 1350,
      "revenue_total": 28000,
      "active_subscriptions": 89,
      "payment_provider": "stripe",
      "on_sale": true,
      "first_listed_at": "2025-12-01T00:00:00.000Z",
      "first_seen_at": "2025-11-15T00:00:00.000Z",
      "_tier": "free"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 2,
    "total": 347,
    "totalPages": 174
  }
}

GET /api/v1/projects/{slug}

Returns details for a single project by its slug (domain). Includes additional fields like traffic, profit margin, and SEO data compared to the list endpoint.

Example Request

curl -H "X-API-Key: sk_live_your_key_here" \
  "https://saas-marketplace-ecru.vercel.app/api/v1/projects/invoicebot.io"

Example Response

{
  "data": {
    "id": 42,
    "name": "InvoiceBot",
    "domain": "invoicebot.io",
    "slug": "invoicebot-io",
    "description": "Automated invoicing SaaS for freelancers",
    "category": "Finance",
    "asking_price": 45000,
    "mrr_at_discovery": 1200,
    "revenue_last30d": 1350,
    "revenue_total": 28000,
    "active_subscriptions": 89,
    "payment_provider": "stripe",
    "on_sale": true,
    "first_listed_at": "2025-12-01T00:00:00.000Z",
    "first_seen_at": "2025-11-15T00:00:00.000Z",
    "visitors_last30d": 4200,
    "profit_margin": 82.5,
    "target_audience": "B2B",
    "organic_etv": 320,
    "organic_keywords": 47,
    "_tier": "pro",
    "scoring": {
      "deal_score": 7.85,
      "geo_leverage": 6,
      "saturation": 3,
      "replaceability": 4,
      "formula_version": "v2.6",
      "scored_at": "2025-12-10T12:00:00.000Z",
      "geo_confidence": 0.78,
      "sat_confidence": 0.82,
      "repl_confidence": 0.71,
      "data_completeness": 0.9
    }
  }
}

Errors

The API returns standard HTTP error codes with a JSON body:

CodeMeaningDescription
401UnauthorizedMissing or invalid API key
404Not FoundProject with the given slug does not exist
429Rate Limit ExceededToo many requests — wait until the window resets
{
  "error": "Rate limit exceeded",
  "remaining": 0,
  "resetAt": 1717001260000
}