Signals

Create Social Mentions signal

Reach prospects who are actively talking about the topics you care about on LinkedIn. Track the keywords that matter to you and turn the people mentioning them — and the people engaging with those posts — into enriched leads.

Input: keywords to track (keywords, plus keywordExclude to skip posts containing unwanted terms), which people on each matching post become leads (engagementTypes: the post author, and/or people who liked or commented), whether a company page that authors a matching post becomes a company-only lead (includeCompanyAuthors, see below), a minimum engagement threshold (minEngagement), the time window to monitor (postedLimit: 24h, week, or month), and your ICP filters (targetPersonas, customPersonaTitles, companySizeFilters, locations, industryFilters, each with an exclusion variant), with optional enrichment (getEmails, getPhones). Optional excludedCommentKeywords skips people whose comment is only a polite reaction — e.g. ["félicitations", "bravo", "congrats"] on a post announcing a new job; matched as whole words, ignoring case and accents; reactions are never affected.

Output: every person matching your keywords and ICP config is pushed to your webhookUrl as an enriched lead — including the matched keywords, the LinkedIn post involved, their profile details (name, title, location, company), and enriched contact data when requested. Non-matching posts and people are filtered out. New mentions are picked up daily and delivered up to your dailyLeadLimit per day.

Company authors (includeCompanyAuthors): when a company page, not a person, publishes a matching post and includeCompanyAuthors is on (the default for an author-only signal, i.e. engagementTypes: ["poster"]), that company is delivered as a company-only lead: contact is an empty string and the company block is filled (name, website, LinkedIn URL, industry, size, location). Persona filters (targetPersonas, customPersonaTitles) do not apply to a company author; company size and industry filters still do. Set includeCompanyAuthors: false to receive person authors only. When "poster" is combined with "likes" or "comments", it defaults to off. A company-only lead has this one shape everywhere: on its first delivery, on a redelivery, and in GET /api/v1/signals/{signal_id}/leads. Like every delivery, it carries the X-Webhook-Id header, stable across retries.

Use cases:

  • Topic-led outreach — reach people discussing your problem space with a message tied to what they said.
  • Competitor-mention capture — catch people naming a competitor and offer an alternative.
  • Community building — join the conversation to build brand and inbound.
post/api/v1/signals/social-mentions

Request

  • Base URL: https://api.rodz.io (the document declares no server; this is the origin it was published from)
  • URL: https://api.rodz.io/api/v1/signals/social-mentions
  • Auth: HTTP bearer

Request body

namestring required

Name for this signal

webhookUrlstring nullable

Where each lead is POSTed as it is produced. Optional (since 2026-09-23): omit it when you read leads with GET /api/v1/signals/{signalId}/leads or route them to a connected CRM or sequencer with destinations on PATCH /api/v1/signals/{signalId}.

dailyLeadLimitinteger

Max leads per day

duplicateHandlingstring nullable

Duplicate lead handling: 'refuse' (never accept), 'allow' (always accept), or 'Xd' (accept a duplicate after X days, e.g. '7d'). Optional — defaults to 'allow', so a contact who triggers this signal a second time is delivered a second time.

statusstring nullable

Initial status (default: draft). Accepts draft, active, or paused. If active, mandatory config fields are validated.

Example request

{
  "config": {
    "companySizeFilters": [],
    "customPersonaTitles": [],
    "detectTechnologies": false,
    "engagementTypes": [
      "likes",
      "comments"
    ],
    "excludedCommentKeywords": [
      "félicitations",
      "bravo",
      "congrats"
    ],
    "excludedCompanySizeFilters": [],
    "excludedCompanyUrls": [],
    "excludedIndustryFilters": [],
    "excludedLocations": [],
    "excludedTitles": [],
    "getEmails": true,
    "getHomepageContent": false,
    "getPhones": false,
    "getSireneData": false,
    "industryFilters": [],
    "keywordExclude": [],
    "keywords": [
      "Rodz",
      "lead tracker"
    ],
    "locations": [],
    "maxPosts": 0,
    "minEngagement": 5,
    "postedLimit": "24h",
    "targetPersonas": []
  },
  "dailyLeadLimit": 50,
  "name": "Brand mentions on LinkedIn",
  "status": "active",
  "webhookUrl": "https://your-server.com/webhooks/rodz"
}

Response

Signal created

idstring required
namestring required
statusstring required
signalTypeIdstring required
webhookUrlstring nullable
configobject nullable

Signal-specific configuration

dailyLeadLimitinteger required
leadsTodayinteger required
leadsTotalinteger required
duplicateHandlingstring required

Duplicate lead handling: 'refuse' (never accept), 'allow' (always accept), or 'Xd' (accept after X days)

createdAtstring required
updatedAtstring required
lastLeadAtstring nullable
appliedobject

Settings this signal runs with where they differ from config, keyed like config. {} when every stored setting is applied as stored. A null value means the stored field is not used by this signal. Every entry is explained by a warning naming the same field.

Example response

{
  "applied": {
    "allowUnknownCompanySize": false,
    "maxJobAgeDays": 180
  },
  "config": {
    "companySizeFilters": [
      "201-500",
      "501-1000"
    ],
    "getEmails": true,
    "jobTitles": [
      "CTO"
    ],
    "locations": [
      "France"
    ],
    "maxJobAgeDays": 90
  },
  "createdAt": "2026-01-15T10:30:00Z",
  "dailyLeadLimit": 50,
  "duplicateHandling": "refuse",
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "lastLeadAt": "2026-03-15T14:22:00Z",
  "leadsToday": 3,
  "leadsTotal": 127,
  "name": "CTOs changing jobs in France",
  "signalTypeId": "job_changes",
  "status": "active",
  "updatedAt": "2026-03-16T08:00:00Z",
  "warnings": [
    {
      "code": "VALUE_BELOW_MINIMUM",
      "field": "maxJobAgeDays",
      "message": "`maxJobAgeDays` is 90; this signal applies 180. Job changes are delivered up to 180 days after the start date, and a shorter window is raised to that minimum.",
      "severity": "info",
      "values": [
        "90"
      ]
    }
  ],
  "webhookUrl": "https://your-server.com/webhooks/rodz"
}

Changes

No recorded changes to this operation across all 1 revision of this API.