Prospex docs

Quickstart

Pull your first rows out of Prospex with curl from a list feed URL, then decide which of the two credential kinds your integration wants.

1. Get a list feed URL

Open a list in the app and go to its Connect page. It carries two URLs, one per format, both ending in a token:

https://prospex.ch/app/lists/feed/<token>.json
https://prospex.ch/app/lists/feed/<token>.csv

The token is the whole credential, so treat the URL the way you treat a password. Regenerating it on that page revokes the old one immediately.

2. Pull the first page

curl -s 'https://prospex.ch/app/lists/feed/<token>.json?limit=5' | jq .

What comes back is an envelope with the list's identity, your usage so far today, and the rows:

{
  "version": 1,
  "market": {"id": 41, "name": "Fiduciaires romandes", "refreshed_at": "2026-08-17T06:00:11Z"},
  "generated_at": "2026-08-21T09:14:02Z",
  "count": 5,
  "total": 218,
  "has_more": true,
  "next_url": "https://prospex.ch/app/lists/feed/<token>.json?limit=5&cursor=NXwx…",
  "usage": {"rows_today": 5, "daily_limit": 500, "rows_this_month": 5, "monthly_limit": 1000},
  "data": [
    {
      "company_id": 481203,
      "company_name": "Exemple Fiduciaire SA",
      "company_uid": "CHE-123.456.789",
      "company_website": "https://exemple-fiduciaire.ch",
      "company_canton": "VD",
      "company_employee_size": "11-50",
      "fit": "strong",
      "fit_label": "Strong fit",
      "reasons": ["Fiduciary services in Vaud", "11-50 employees"],
      "missing": [],
      "in_crm": false,
      "signal_count": 2,
      "signals": [
        {
          "signal_type": "capital_increase",
          "event_date": "2026-07-30",
          "title": "Capital increased to CHF 250,000"
        }
      ]
    }
  ]
}

Rows are flat, with a company_ prefix on the registry facts. An n8n node writes {{$json.company_name}}. The list feed has the full field list.

3. Take the rest

Follow next_url until it is empty. It is absolute and ready to fetch:

url='https://prospex.ch/app/lists/feed/<token>.json?limit=200'
while [ -n "$url" ]; do
  page=$(curl -s "$url")
  echo "$page" | jq -c '.data[]' >> list.jsonl
  url=$(echo "$page" | jq -r '.next_url')
done

For a spreadsheet, ask for the CSV instead and skip the loop. It streams the whole bucket in one response.

curl -s -o list.csv 'https://prospex.ch/app/lists/feed/<token>.csv'

Either way, the rows count against one monthly allowance of distinct companies per account: 250 a month on Starter, 1,000 on Pro and 10,000 on Business, with a daily ceiling of half that. A company counts once a month, however often you read it. The usage block on each JSON page tells you where you are, and Limits has the rest.

4. If you need to write, not read

Adding companies to an Outreach project, starting research, running a step in your own tooling or approving an opener all go through the API, which uses a bearer key with explicit scopes. Issue one at prospex.ch/app/api-keys/, then:

export PROSPEX_API_KEY=pxk_xxxxxxxx_…
curl -s -H "Authorization: Bearer $PROSPEX_API_KEY" \
  'https://prospex.ch/api/v1/outreach/projects'

Read Authentication for the scope list, and Conventions and errors for the idempotency rule that applies to every mutation.

Where to go next

  • Export a list takes the loop above to the end, including the explore bucket and what to do when a list refreshes mid-walk.
  • Clay and n8n cover the same feed without code.
  • Outreach Connect is the machine surface of a list's outreach: feed, webhooks, API and external stages.