EcomScout Audiences API

Segment sizing, compact exports, enrichment, lookalikes, saved audiences. Rows are tiers, not raw metrics; per-store detail stays on /v1/stores/{domain}.

Operations 14

GET /v1/audiences/options Filter vocabulary with store counts: verticals, categories, industries… #
GET /v1/audiences/preview Size a segment: count, withEmail, emailCoveragePct, ceiling, exportable… #
POST /v1/audiences/preview Same as GET with a JSON body (arrays for domains / excludeDomains) #
GET /v1/audiences/export Export compact rows for a segment. #
POST /v1/audiences/export Export with a JSON body: filters plus include[], format, requireEmail, sort… #
POST /v1/audiences/enrich Compact rows for up to 500 domains you supply; missing[] for unknown domains. #
POST /v1/audiences/lookalike Scored lookalikes from 1 to 25 seed domains: learned profile (categories… #
POST /v1/audiences Save an audience: name, description, definition. #
GET /v1/audiences List your saved audiences #
GET /v1/audiences/{id} One saved audience #
PATCH /v1/audiences/{id} Update name, description and/or definition. #
DELETE /v1/audiences/{id} Delete a saved audience #
GET /v1/audiences/{id}/changes Stores that entered (rows) or left (domains) since the snapshot. #
GET /v1/audiences/{id}/export Export the saved definition (same params and charges as /v1/audiences/export) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/ecomscout-com:ecomscout-com-audiences-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

ecomscout-com-audiences-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: EcomScout Public Audiences API
  version: 0.7.0
  description: Unified ecommerce intelligence API for coding agents, app builders, and VC/PE analysts. Stores, products, apps, analytics, changes, signals, scrapes — one JSON object per resource. Read /v1/llms.txt then /v1/examples before calling data endpoints. Only 2xx responses burn daily quota and plan buckets; 4xx do not. Store contacts (company, emails, phones) on GET /v1/stores/{domain} and GET /v1/stores/{domain}/contacts.
servers:
- url: https://api.ecomscout.com
security:
- apiKey: []
- bearer: []
tags:
- name: Audiences
  description: Segment sizing, compact exports, enrichment, lookalikes, saved audiences. Rows are tiers, not raw metrics; per-store detail stays on /v1/stores/{domain}.
paths:
  /v1/audiences/options:
    get:
      tags:
      - Audiences
      summary: 'Filter vocabulary with store counts: verticals, categories, industries…'
      operationId: audienceOptions
      parameters:
      - name: field
        in: query
        required: true
        schema:
          type: string
          enum:
          - industry
          - vertical
          - category
          - countryCode
          - appSlug
          - mainMarketingChannel
          - sizeTier
          - revenueTier
          - productTier
          - adSpendTier
          - trustpilotTier
      - name: q
        in: query
        schema:
          type: string
        description: Substring filter on the value
      - name: vertical
        in: query
        schema:
          type: string
        description: Scope counts to a vertical
      - name: industry
        in: query
        schema:
          type: string
      - name: countryCode
        in: query
        schema:
          type: string
      - name: limit
        in: query
        schema:
          type: integer
          default: 100
          maximum: 500
  /v1/audiences/preview:
    get:
      tags:
      - Audiences
      summary: 'Size a segment: count, withEmail, emailCoveragePct, ceiling, exportable…'
      operationId: audiencePreview
      parameters:
      - name: filters
        in: query
        schema:
          $ref: '#/components/schemas/AudienceDefinition'
        style: form
        explode: true
    post:
      tags:
      - Audiences
      summary: Same as GET with a JSON body (arrays for domains / excludeDomains)
      operationId: audiencePreviewPost
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AudienceDefinition'
  /v1/audiences/export:
    get:
      tags:
      - Audiences
      summary: Export compact rows for a segment.
      operationId: audienceExport
      parameters:
      - name: filters
        in: query
        schema:
          $ref: '#/components/schemas/AudienceDefinition'
        style: form
        explode: true
      - name: include
        in: query
        schema:
          type: string
        description: contacts, channel (comma list)
      - name: format
        in: query
        schema:
          type: string
          enum:
          - json
          - ndjson
          - csv
          default: json
      - name: requireEmail
        in: query
        schema:
          type: boolean
        description: Only rows with a verified email (charges contactReveals)
      - name: sort
        in: query
        schema:
          type: string
          enum:
          - visits
          - revenue
          - domain
          - updated
          default: visits
      - name: limit
        in: query
        schema:
          type: integer
          default: 500
          maximum: 5000
        description: 'Capped by plan: Starter 500, Pro 1000, audiences:bulk 5000'
      - name: cursor
        in: query
        schema:
          type: string
        description: page.nextCursor or x-next-cursor from the previous page. Signed to the filter set and key, 24h
      responses:
        '200':
          description: 'data[] of AudienceRow, page {limit, count, nextCursor, total}, meta {definition, definitionHash, segmentCount, ceiling, limitedBy, charged}. CSV/NDJSON: x-next-cursor, x-total-count, x-page-count headers'
        '422':
          description: 'segment_too_broad: add a narrowing filter or split (details.breakdown)'
        '429':
          description: rate_limited with details.metric = exportRows | contactReveals and resetAt
    post:
      tags:
      - Audiences
      summary: 'Export with a JSON body: filters plus include[], format, requireEmail, sort…'
      operationId: audienceExportPost
      requestBody:
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/AudienceDefinition'
              - type: object
                properties:
                  include:
                    type: array
                    items:
                      type: string
                      enum:
                      - contacts
                      - channel
                      - matchedApps
                  format:
                    type: string
                    enum:
                    - json
                    - ndjson
                    - csv
                  requireEmail:
                    type: boolean
                  sort:
                    type: string
                  limit:
                    type: integer
                  cursor:
                    type: string
  /v1/audiences/enrich:
    post:
      tags:
      - Audiences
      summary: Compact rows for up to 500 domains you supply; missing[] for unknown domains.
      operationId: audienceEnrich
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - domains
              properties:
                domains:
                  type: array
                  items:
                    type: string
                  minItems: 1
                  maxItems: 500
                include:
                  type: array
                  items:
                    type: string
                    enum:
                    - contacts
                    - channel
  /v1/audiences/lookalike:
    post:
      tags:
      - Audiences
      summary: 'Scored lookalikes from 1 to 25 seed domains: learned profile (categories…'
      operationId: audienceLookalike
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - seeds
              properties:
                seeds:
                  type: array
                  items:
                    type: string
                  minItems: 1
                  maxItems: 25
                limit:
                  type: integer
                  default: 25
                  maximum: 100
                excludeSeeds:
                  type: boolean
                  default: true
                include:
                  type: array
                  items:
                    type: string
                filters:
                  $ref: '#/components/schemas/AudienceDefinition'
  /v1/audiences:
    post:
      tags:
      - Audiences
      summary: 'Save an audience: name, description, definition.'
      operationId: createAudience
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - name
              - definition
              properties:
                name:
                  type: string
                description:
                  type: string
                definition:
                  $ref: '#/components/schemas/AudienceDefinition'
    get:
      tags:
      - Audiences
      summary: List your saved audiences
      operationId: listAudiences
  /v1/audiences/{id}:
    get:
      tags:
      - Audiences
      summary: One saved audience
      operationId: getAudience
    patch:
      tags:
      - Audiences
      summary: Update name, description and/or definition.
      operationId: updateAudience
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              minProperties: 1
              properties:
                name:
                  type: string
                  maxLength: 120
                description:
                  type: string
                  maxLength: 600
                definition:
                  $ref: '#/components/schemas/AudienceDefinition'
    delete:
      tags:
      - Audiences
      summary: Delete a saved audience
      operationId: deleteAudience
  /v1/audiences/{id}/changes:
    get:
      tags:
      - Audiences
      summary: Stores that entered (rows) or left (domains) since the snapshot.
      operationId: audienceChanges
      parameters:
      - name: commit
        in: query
        schema:
          type: boolean
          default: false
      - name: include
        in: query
        schema:
          type: string
      - name: limit
        in: query
        schema:
          type: integer
          default: 200
          maximum: 500
  /v1/audiences/{id}/export:
    get:
      tags:
      - Audiences
      summary: Export the saved definition (same params and charges as /v1/audiences/export)
      operationId: audienceSavedExport
      parameters:
      - name: include
        in: query
        schema:
          type: string
      - name: format
        in: query
        schema:
          type: string
          enum:
          - json
          - ndjson
          - csv
      - name: requireEmail
        in: query
        schema:
          type: boolean
      - name: sort
        in: query
        schema:
          type: string
      - name: limit
        in: query
        schema:
          type: integer
      - name: cursor
        in: query
        schema:
          type: string
components:
  schemas:
    AudienceDefinition:
      type: object
      description: 'Audience filters. Same keys on GET (comma lists) and POST (arrays). Export requires at least one narrowing key: country, countryCode, vertical, category, industry, appSlug, includeApps, requireApps, includeProducts, mainMarketingChannel, domains or q.'
      properties:
        q:
          type: string
        country:
          type: string
        countryCode:
          type: string
        excludeCountries:
          type: string
        vertical:
          type: string
        excludeVerticals:
          type: string
        category:
          type: string
        industry:
          type: string
        isDropshipper:
          type: boolean
        appSlug:
          type: string
        includeApps:
          type: string
        requireApps:
          type: string
        excludeApps:
          type: string
        appsMatch:
          type: string
          enum:
          - any
          - all
        removedApps:
          type: string
          description: Comma slugs. Stores that uninstalled any of these inside the window (appRemovedSince, default last 30 days). Not excludeApps.
        installedApps:
          type: string
          description: Comma slugs. Stores that newly installed any of these inside the window (appInstalledSince, default last 30 days).
        appRemovedSince:
          type: string
          format: date
        appInstalledSince:
          type: string
          format: date
        newAdsSince:
          type: string
          format: date
        includeProducts:
          type: string
        excludeProducts:
          type: string
        minVisits:
          type: number
        maxVisits:
          type: number
        minRevenue:
          type: number
        maxRevenue:
          type: number
        minRating:
          type: number
        minAdSpend:
          type: number
        maxAdSpend:
          type: number
        minTrustpilotRating:
          type: number
          minimum: 0
          maximum: 5
        minProducts:
          type: integer
        maxProducts:
          type: integer
        sizeTier:
          type: string
          description: Comma list of tier keys
        revenueTier:
          type: string
          description: Comma list of tier keys
        mainMarketingChannel:
          type: string
          description: Organic|Direct|Paid|Social|Referral, comma list
        minVisitsGrowthPct:
          type: number
        growthWindow:
          type: integer
          enum:
          - 1
          - 3
          - 6
        updatedSince:
          type: string
          format: date
        domains:
          oneOf:
          - type: string
          - type: array
            items:
              type: string
          description: GET max 200, POST max 500
        excludeDomains:
          oneOf:
          - type: string
          - type: array
            items:
              type: string
          description: GET max 200, POST max 5000
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-Api-Key
    bearer:
      type: http
      scheme: bearer