Market Signals

Market Signals

Market Signals let you set up automated monitoring subscriptions that continuously scan external data sources and deliver matching signals to your webhook.

Supported signal types:

Type
What it monitors

JOB_POSTS

New job postings matching title, skill, company, and location criteria

LINKEDIN_POST

LinkedIn posts matching keyword and AI-based persona/content filters (requires Sales Navigator)

FUND_RAISED

Fund closings and fundraising events (web scraping + SEC EDGAR)

RECENT_INVESTMENT

Recent investment rounds and funding announcements (web scraping + SEC EDGAR)

IPO

IPO filings and public listing announcements (web scraping + SEC EDGAR)

Typical workflow:

  1. POST /v1/market-signals/subscriptions - Create a subscription with type, filters, and webhook URL

  2. Subscription automatically polls on the configured interval (daily or weekly)

  3. New matching signals are delivered to your webhook as batched payloads

  4. GET /v1/market-signals/subscriptions/{id}/signals - Browse delivered signals

  5. Use pause/resume/trigger endpoints to control the subscription lifecycle

AI-powered filter generation (JOB_POSTS):

Instead of manually defining filters, you can provide a natural language prompt and the AI will generate complete filter configurations. You can also combine a prompt with partial filters for hybrid mode, where the AI augments your filters with additional criteria inferred from the prompt.

LinkedIn integration:

LINKEDIN_POST subscriptions require a connected LinkedIn Sales Navigator account via the Saber Chrome extension. The subscription uses boolean keyword search combined with AI-based content quality and persona/company filtering to surface high-relevance posts.

List all market signal subscriptions for your organization

get

Retrieve a paginated list of market signal subscriptions. By default, deleted subscriptions are excluded. Set includeDeleted=true to include them.

Results are sorted by creation date (latest first).

Authorizations
AuthorizationstringRequired

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

Query parameters
limitinteger · min: 1 · max: 100Optional

Maximum number of subscriptions to return (1-100, default 20)

Default: 20
offsetintegerOptional

Number of subscriptions to skip for pagination (default 0)

Default: 0
includeDeletedbooleanOptional

Include soft-deleted subscriptions in the response

Default: false
Responses
chevron-right
200

Subscriptions retrieved successfully

application/json

Paginated list of market signal subscriptions

totalintegerRequired

Total number of subscriptions matching the query

Example: 5
limitintegerRequired

Maximum subscriptions per page

Example: 20
offsetintegerRequired

Number of subscriptions skipped

Example: 0
get
/v1/market-signals/subscriptions

Create a market signal subscription to monitor job posts, LinkedIn posts, fundraising, investments, or IPOs

post

Create a subscription that continuously monitors external data sources and delivers matching signals to your webhook. Subscriptions run on a configurable polling interval (daily or weekly) and automatically detect and deliver new signals as they appear.


Subscription Types

Type
Description
Data Source

JOB_POSTS

Monitor new job postings matching your criteria

Job posting aggregators

LINKEDIN_POST

Monitor LinkedIn posts matching keyword filters

LinkedIn (requires Sales Navigator)

FUND_RAISED

Monitor fund closings and fundraising events

Web scraping + SEC EDGAR

RECENT_INVESTMENT

Monitor recent investment and funding rounds

Web scraping + SEC EDGAR

IPO

Monitor IPO and public listing announcements

Web scraping + SEC EDGAR


Filter Modes

Filters can be provided in three ways:

  1. Prompt only (JOB_POSTS): Provide a natural language prompt and the AI generates complete filters

  2. Prompt + filters (JOB_POSTS): Provide both; the AI augments your filters with prompt intent

  3. Filters only: Provide structured filters directly (required for LINKEDIN_POST)


Webhook Delivery

Matched signals are batched and delivered to your webhookUrl on each polling interval. Each delivery includes an array of signal objects with metadata, payload, and confidence scores. Use webhookSecret to verify webhook signatures via HMAC-SHA256.


LinkedIn Post Requirements

LINKEDIN_POST subscriptions require a connected LinkedIn Sales Navigator account. If no connector is found, the request returns an error with setup instructions.

Authorizations
AuthorizationstringRequired

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

Body
typestring · enumRequired

The type of market signal to monitor. Determines which data sources are polled and which filter schema is accepted.

Example: JOB_POSTSPossible values:
namestring · max: 200Optional

Optional display name for the subscription

Example: DevOps hiring tracker
promptstringOptional

Natural language prompt for AI-based filter generation (JOB_POSTS only). When provided without filters, the AI generates complete filters from the prompt. When provided with filters, the AI augments the filters with prompt intent. Not yet supported for LINKEDIN_POST.

Example: Find companies hiring machine learning engineers at seed to Series B startups in Europe
webhookUrlstring · uri · max: 2048Required

URL to receive webhook notifications when new signals are matched

Example: https://myapp.com/webhooks/market-signals
webhookSecretstringOptional

Optional secret for HMAC-SHA256 webhook signature verification

Example: whsec_abc123
intervalSignalLimitinteger · min: 1 · max: 10000Optional

Maximum number of signals to deliver per polling interval (1-10000, default 500)

Default: 500Example: 100
intervalstring · enumOptional

Polling interval for checking new signals

Default: dailyExample: dailyPossible values:
Responses
post
/v1/market-signals/subscriptions

Get a market signal subscription by ID

get

Retrieve a single market signal subscription including its filter configuration and status.

Authorizations
AuthorizationstringRequired

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

Path parameters
subscriptionIdstring · uuidRequired

The unique identifier of the subscription

Example: a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
Responses
chevron-right
200

Subscription retrieved successfully

application/json

A market signal subscription with its current configuration and status

idstring · uuidRequired

Unique identifier for the subscription

Example: a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
organizationIdstringRequired

Organization that owns this subscription

Example: org_123
typestring · enumRequired

The subscription type (immutable after creation)

Example: JOB_POSTSPossible values:
namestring · nullableOptional

Display name for the subscription

Example: DevOps hiring tracker
statusstring · enumRequired

Current subscription status (derived from timestamps)

Example: activePossible values:
promptstring · nullableOptional

Natural language prompt used for filter generation (if applicable)

Example: Find companies hiring machine learning engineers
webhookUrlstring · uriRequired

Webhook delivery URL

Example: https://myapp.com/webhooks/market-signals
intervalSignalLimitintegerRequired

Maximum signals per polling interval

Example: 500
intervalstring · enumRequired

Polling interval

Example: dailyPossible values:
createdAtstring · date-timeRequired

When the subscription was created

Example: 2024-06-15T10:00:00Z
updatedAtstring · date-timeRequired

When the subscription was last updated

Example: 2024-06-15T10:00:00Z
get
/v1/market-signals/subscriptions/{subscriptionId}

Delete a market signal subscription

delete

Soft-delete a subscription and stop its polling workflow. The subscription will no longer deliver signals. This operation cannot be undone via the API.

Authorizations
AuthorizationstringRequired

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

Path parameters
subscriptionIdstring · uuidRequired

The unique identifier of the subscription to delete

Example: a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
Responses
delete
/v1/market-signals/subscriptions/{subscriptionId}

No content

Update a market signal subscription

patch

Partially update a subscription's configuration. All fields are optional; only provided fields are updated. The subscription type is immutable and cannot be changed after creation.

When filters or webhook configuration changes, the active polling workflow is automatically refreshed. When the polling interval changes, the workflow is recreated.

Authorizations
AuthorizationstringRequired

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

Path parameters
subscriptionIdstring · uuidRequired

The unique identifier of the subscription to update

Example: a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
Body

Partial update for a market signal subscription. All fields are optional; only provided fields are updated. The subscription type is immutable and cannot be changed.

namestring · max: 200Optional

Updated display name

Example: Updated DevOps tracker
promptstringOptional

Updated natural language prompt (JOB_POSTS only)

webhookUrlstring · uri · max: 2048Optional

Updated webhook URL

webhookSecretstringOptional

Updated webhook secret

intervalSignalLimitinteger · min: 1 · max: 10000Optional

Updated maximum signals per interval (1-10000)

intervalstring · enumOptional

Updated polling interval. Changing this recreates the polling workflow.

Possible values:
Responses
chevron-right
200

Subscription updated successfully

application/json

A market signal subscription with its current configuration and status

idstring · uuidRequired

Unique identifier for the subscription

Example: a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
organizationIdstringRequired

Organization that owns this subscription

Example: org_123
typestring · enumRequired

The subscription type (immutable after creation)

Example: JOB_POSTSPossible values:
namestring · nullableOptional

Display name for the subscription

Example: DevOps hiring tracker
statusstring · enumRequired

Current subscription status (derived from timestamps)

Example: activePossible values:
promptstring · nullableOptional

Natural language prompt used for filter generation (if applicable)

Example: Find companies hiring machine learning engineers
webhookUrlstring · uriRequired

Webhook delivery URL

Example: https://myapp.com/webhooks/market-signals
intervalSignalLimitintegerRequired

Maximum signals per polling interval

Example: 500
intervalstring · enumRequired

Polling interval

Example: dailyPossible values:
createdAtstring · date-timeRequired

When the subscription was created

Example: 2024-06-15T10:00:00Z
updatedAtstring · date-timeRequired

When the subscription was last updated

Example: 2024-06-15T10:00:00Z
patch
/v1/market-signals/subscriptions/{subscriptionId}

Pause a market signal subscription

post

Pause an active subscription. The polling workflow is suspended and no new signals will be delivered until the subscription is resumed. The subscription configuration is preserved.

Authorizations
AuthorizationstringRequired

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

Path parameters
subscriptionIdstring · uuidRequired

The unique identifier of the subscription to pause

Example: a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
Responses
chevron-right
200

Subscription paused successfully

application/json

A market signal subscription with its current configuration and status

idstring · uuidRequired

Unique identifier for the subscription

Example: a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
organizationIdstringRequired

Organization that owns this subscription

Example: org_123
typestring · enumRequired

The subscription type (immutable after creation)

Example: JOB_POSTSPossible values:
namestring · nullableOptional

Display name for the subscription

Example: DevOps hiring tracker
statusstring · enumRequired

Current subscription status (derived from timestamps)

Example: activePossible values:
promptstring · nullableOptional

Natural language prompt used for filter generation (if applicable)

Example: Find companies hiring machine learning engineers
webhookUrlstring · uriRequired

Webhook delivery URL

Example: https://myapp.com/webhooks/market-signals
intervalSignalLimitintegerRequired

Maximum signals per polling interval

Example: 500
intervalstring · enumRequired

Polling interval

Example: dailyPossible values:
createdAtstring · date-timeRequired

When the subscription was created

Example: 2024-06-15T10:00:00Z
updatedAtstring · date-timeRequired

When the subscription was last updated

Example: 2024-06-15T10:00:00Z
post
/v1/market-signals/subscriptions/{subscriptionId}/pause

Resume a paused market signal subscription

post

Resume a paused subscription. The polling workflow restarts and signals will be delivered again on the next interval.

Authorizations
AuthorizationstringRequired

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

Path parameters
subscriptionIdstring · uuidRequired

The unique identifier of the subscription to resume

Example: a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
Responses
chevron-right
200

Subscription resumed successfully

application/json

A market signal subscription with its current configuration and status

idstring · uuidRequired

Unique identifier for the subscription

Example: a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
organizationIdstringRequired

Organization that owns this subscription

Example: org_123
typestring · enumRequired

The subscription type (immutable after creation)

Example: JOB_POSTSPossible values:
namestring · nullableOptional

Display name for the subscription

Example: DevOps hiring tracker
statusstring · enumRequired

Current subscription status (derived from timestamps)

Example: activePossible values:
promptstring · nullableOptional

Natural language prompt used for filter generation (if applicable)

Example: Find companies hiring machine learning engineers
webhookUrlstring · uriRequired

Webhook delivery URL

Example: https://myapp.com/webhooks/market-signals
intervalSignalLimitintegerRequired

Maximum signals per polling interval

Example: 500
intervalstring · enumRequired

Polling interval

Example: dailyPossible values:
createdAtstring · date-timeRequired

When the subscription was created

Example: 2024-06-15T10:00:00Z
updatedAtstring · date-timeRequired

When the subscription was last updated

Example: 2024-06-15T10:00:00Z
post
/v1/market-signals/subscriptions/{subscriptionId}/resume

Trigger an immediate run of a market signal subscription

post

Trigger an immediate polling run for the subscription, regardless of the normal interval schedule. This is useful for testing a new subscription or forcing a refresh after updating filters.

The request succeeds regardless of the subscription's status. However, only subscriptions in active status will execute the polling workflow and deliver signals. Paused or deleted subscriptions return 200 but do not trigger a run.

Authorizations
AuthorizationstringRequired

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

Path parameters
subscriptionIdstring · uuidRequired

The unique identifier of the subscription to trigger

Example: a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
Responses
chevron-right
200

Subscription triggered successfully

application/json

A market signal subscription with its current configuration and status

idstring · uuidRequired

Unique identifier for the subscription

Example: a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
organizationIdstringRequired

Organization that owns this subscription

Example: org_123
typestring · enumRequired

The subscription type (immutable after creation)

Example: JOB_POSTSPossible values:
namestring · nullableOptional

Display name for the subscription

Example: DevOps hiring tracker
statusstring · enumRequired

Current subscription status (derived from timestamps)

Example: activePossible values:
promptstring · nullableOptional

Natural language prompt used for filter generation (if applicable)

Example: Find companies hiring machine learning engineers
webhookUrlstring · uriRequired

Webhook delivery URL

Example: https://myapp.com/webhooks/market-signals
intervalSignalLimitintegerRequired

Maximum signals per polling interval

Example: 500
intervalstring · enumRequired

Polling interval

Example: dailyPossible values:
createdAtstring · date-timeRequired

When the subscription was created

Example: 2024-06-15T10:00:00Z
updatedAtstring · date-timeRequired

When the subscription was last updated

Example: 2024-06-15T10:00:00Z
post
/v1/market-signals/subscriptions/{subscriptionId}/trigger

List signals delivered by a market signal subscription

get

Retrieve a paginated list of signals that have been matched and stored by a subscription. Each signal includes the raw payload from the data source (e.g., job posting details, LinkedIn post content, or funding announcement), along with metadata like confidence scores and delivery status.

Results are sorted by creation date (latest first).

Authorizations
AuthorizationstringRequired

API key authentication using Bearer token. Format: sk_live_ followed by a secure random string.

Path parameters
subscriptionIdstring · uuidRequired

The unique identifier of the subscription

Example: a12b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
Query parameters
limitinteger · min: 1 · max: 100Optional

Maximum number of signals to return (1-100, default 20)

Default: 20
offsetintegerOptional

Number of signals to skip for pagination (default 0)

Default: 0
Responses
chevron-right
200

Signals retrieved successfully

application/json

Paginated list of market signals for a subscription

totalintegerRequired

Total number of signals for the subscription

Example: 42
limitintegerRequired

Maximum signals per page

Example: 20
offsetintegerRequired

Number of signals skipped

Example: 0
get
/v1/market-signals/subscriptions/{subscriptionId}/signals

Last updated