# Quickstart

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

## 1. Get a market feed URL

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

```plaintext
https://prospex.ch/app/markets/feed/<token>.json
https://prospex.ch/app/markets/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

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

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

```json
{
  "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/markets/feed/<token>.json?limit=5&cursor=NXwx…",
  "usage": {"rows_today": 5, "daily_limit": 5000},
  "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 market feed](https://prospex.ch/docs/market-feed/) has the full field list.

## 3. Take the rest

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

```bash
url='https://prospex.ch/app/markets/feed/<token>.json?limit=200'
while [ -n "$url" ]; do
  page=$(curl -s "$url")
  echo "$page" | jq -c '.data[]' >> market.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.

```bash
curl -s -o market.csv 'https://prospex.ch/app/markets/feed/<token>.csv'
```

Either way, the rows count against one budget: 5,000 rows per account per day. The `usage` block on each JSON page tells you where you are, and [Limits](https://prospex.ch/docs/limits/) has the rest.

## 4. If you need to write, not read

Adding companies to a Prospect 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/](https://prospex.ch/app/api-keys/), then:

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

Read [Authentication](https://prospex.ch/docs/authentication/) for the scope list, and [Conventions and errors](https://prospex.ch/docs/conventions/) for the idempotency rule that applies to every mutation.

## Where to go next

- [Export a market](https://prospex.ch/docs/export-a-market/) takes the loop above to the end, including the explore bucket and what to do when a market refreshes mid-walk.
- [Clay](https://prospex.ch/docs/clay/) and [n8n](https://prospex.ch/docs/n8n/) cover the same feed without code.
- [Prospect Connect](https://prospex.ch/docs/prospect-connect/) is the machine surface of a project: feed, webhooks, API and external stages.
