Signals

Create a monitor

Changed on

Creates a new signal monitor for the authenticated user.

Credit cost (credit-based plans): creating a monitor is free. Each signal it delivers costs:

  • 1 finder credit
  • 1 more finder credit for keyword_mention and post_engagement monitors with company filters (icp_filters.industries, icp_filters.employee_count_ranges or icp_filters.countries)
  • 1 more finder credit for keyword_mention and post_engagement monitors with contact filters (icp_filters.job_title_keywords or icp_filters.seniority_levels)
  • With enrichment_level: 1 finder credit when an email is found, and 10 finder credits when a phone number is found (email_phone)
post/api/signals/monitors

Request

  • Base URL
    https://app.findymail.com
  • URL
    https://app.findymail.com/api/signals/monitors
  • Auth
    HTTP bearer

Request body

namestring required

The monitor name.

signal_typestring required

The signal type. Accepted values: keyword_mention, new_hire, job_change, post_engagement, company_hiring.

keywordsstring[]

Keywords to track (required for keyword_mention and post_engagement without post_url, max 5).

webhook_urlstring

Optional HTTPS URL to receive webhook notifications when new signals match.

post_urlstring

LinkedIn post URL to monitor engagement on (post_engagement only).

profile_urlstring

LinkedIn profile URL to monitor (alternative to post_url, post_engagement only).

engagement_typesstring[]

Engagement types to track (required for post_engagement). Accepted values: like, comment.

enrichment_levelstring

Contact enrichment level. Accepted values: email, email_phone.

lead_list_idinteger

ID of a lead list to automatically add matched contacts to.

ai_relevance_promptstring

Optional custom prompt used to score AI relevance of matched signals (max 500 chars).

max_matchesinteger

Optional lifetime cap on the number of signals this monitor may deliver (1-10000). When reached, the monitor pauses itself and stops charging credits. Omit or send null for unlimited.

target_companiesstring[]

Target companies (names or domains) to filter signals (max 100). Only accepted for new_hire and job_change — returns 422 for any other signal type.

is_sharedboolean

Opt-in flag to share the monitor with the user's current team (defaults to false).

job_offer_title_keywordsstring[]

Job offer title keywords to watch for (required for company_hiring, rejected for other types, max 10). Substring match, OR logic, case-insensitive.

Example request

{
  "name": "Hiring monitor",
  "signal_type": "keyword_mention",
  "keywords": [
    "hiring",
    "fundraise"
  ],
  "webhook_url": "https://example.com/webhooks/signals",
  "enrichment_level": "email",
  "lead_list_id": 42,
  "ai_relevance_prompt": "Focus on Series B+ SaaS companies hiring VP Sales.",
  "max_matches": 50,
  "icp_filters": {
    "industries": [
      "Biotechnology"
    ],
    "employee_count_ranges": [
      "51-200"
    ],
    "countries": [
      "US",
      "FR"
    ],
    "job_title_keywords": [
      "VP Sales",
      "CTO"
    ],
    "seniority_levels": [
      11,
      13
    ]
  }
}

Response

Created

idinteger
namestring
signal_typestring
signal_type_labelstring
signal_levelstring
statusstring
keywordsstring[]
icp_filtersstring nullable
webhook_urlstring nullable
webhook_paused_atstring nullable
post_urlstring nullable
profile_urlstring nullable
engagement_typesstring nullable
enrichment_levelstring nullable
lead_list_idstring nullable
ai_relevance_promptstring nullable
target_companiesstring nullable
max_matchesinteger
match_countinteger
is_sharedboolean
is_ownerboolean
is_team_ownerboolean
uses_current_users_monitor_capboolean
user_idinteger
owner_namestring
created_atstring

Example response

{
  "id": 1,
  "name": "Hiring monitor",
  "signal_type": "keyword_mention",
  "signal_type_label": "Keyword Mention",
  "signal_level": "contact",
  "status": "active",
  "keywords": [
    "hiring",
    "fundraise"
  ],
  "icp_filters": null,
  "webhook_url": null,
  "webhook_paused_at": null,
  "post_url": null,
  "profile_url": null,
  "engagement_types": null,
  "enrichment_level": null,
  "lead_list_id": null,
  "ai_relevance_prompt": null,
  "target_companies": null,
  "max_matches": 50,
  "match_count": 0,
  "is_shared": false,
  "is_owner": true,
  "is_team_owner": false,
  "uses_current_users_monitor_cap": true,
  "user_id": 42,
  "owner_name": "Jane Doe",
  "created_at": "2026-02-01T10:00:00.000000Z"
}

Changes

    • breaking

      added subschema #1 subschema #2 to the response body oneOf list for the response status

    • breaking

      the response's body type changed from object to no type for status

    • warning

      removed the optional property from the response with the status

    • info

      added the new optional request property

    • info

      removed the non-success response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      endpoint added