prospex
Prospex docs

Market feed

One market's companies as JSON or CSV, on a revocable URL that needs no session, with the market's own reasons on every row.

One revocable URL per market, in two formats, found on the market's Connect page. The token in the path is the whole credential, with no session and no header, so treat the URL the way you treat a password. Regenerating it revokes the previous one immediately.

curl -s 'https://prospex.ch/app/markets/feed/<token>.json?limit=200'
curl -s -o market.csv 'https://prospex.ch/app/markets/feed/<token>.csv'

Each row is one company, with the market's reasons and recent events attached.

Every response carries Cache-Control: no-store.

Parameters

ParameterMeaning
tab core (the default) or explore. Core is the market's answer to who to sell to. Explore is the wider bucket you have not decided about yet.
limit Rows per page, up to 500. Ignored by the CSV, which streams the whole bucket in one response.
cursor Opaque, and issued by this feed. Follow next_url rather than building one.

Extra parameters are ignored.

The envelope

KeyTypeMeaning
version integer The payload contract. 1 today.
market object The market's id, its name, and when it was last refreshed.
generated_at string ISO 8601 UTC, the moment this page was built.
count integer Rows in data on this page.
total integer Rows in the served bucket, across every page.
has_more boolean Whether a page follows this one.
next_url string The next page, absolute and carrying every parameter you sent. Empty on the last page.
usage object rows_today and daily_limit, so a workflow can stop before the feed stops it.
data array The companies. One flat object per company.

version is bumped when a field changes meaning or leaves. A new field does not bump it.

Pagination

Follow next_url. It is absolute and carries every parameter you sent.

The cursor carries the build it was issued under. A market's order changes only when a build refreshes it, so a cursor from an older build answers 400 invalid_parameter and asks you to start again.

The CSV takes no cursor. It streams up to 10,000 rows in one response and is capped by what remains of the day's row budget.

A row

Flat, with a company_ prefix on the registry facts:

FieldMeaning
fit The stored word. fit_label is the same judgement in the language of the workspace, so a filter written against fit survives a retranslation.
reasons Why this company is in the market, in the same words the workspace shows.
missing What the market asked about and Prospex does not know for this company. A blank field means missing data, not a failed criterion. Useful for deciding what to enrich.
in_crm Whether your connected CRM already holds this company. Populated from the CRM mirror, so it is as current as the last mirror pass.
signals Up to 3 recent events, newest first, each with its type, its date, its title and a link that opens on the event itself. Suppressed events are absent.

Position in the list is the rank.

The CSV columns

One line per company, in this order. The second column is the JSON key a Clay column or an n8n expression maps:

HeaderFrom
Company ID company_id
Company company_name
Company UID company_uid
Company URL company_url
Website company_website
Domain company_domain
Tagline company_tagline
City company_city
Canton company_canton
Audience company_audience
Employee Size company_employee_size
NOGA Division company_sector_code
Sector company_sector
Bucket bucket
Fit fit
Fit Label fit_label
Reasons reasons_text
Missing missing_text
Kept pinned
In CRM in_crm
Signal Count signal_count
Latest Signal latest_signal_date
Signal Titles signal_titles
Signal IDs signal_ids

Four of those keys exist only in the CSV, because the JSON field they come from is an array and a cell cannot nest. reasons_text joins with a pipe, missing_text with a comma, and the two signal columns carry the titles and the ids of the same recent events.

Refusals

StatuserrorWhen
404 unknown_token No feed answers this URL. Also the answer for a feed switched off and for a market that has been deleted, so a response never confirms that a token existed.
402 subscription_required The market owner's subscription is not active. The body carries a billing URL.
400 invalid_parameter A cursor this feed did not issue, or one issued before the market was last refreshed. Start again without a cursor.
429 daily_row_limit The account has taken its rows for the day. Retry-After points at the reset.
503 feed_disabled The surface is switched off globally.

The same five codes come out of the project feed.

No push

There is no webhook on a market.

For push delivery, use a watch (email) or a Prospect project (webhooks).

Cookie preferences

Necessary cookies always run. The other two are on unless you turn them off.