Signals

Create Competitor Customer Care Connections signal

Identify people newly connecting with your competitors' customer success and support teams — a strong signal they are becoming (or already are) that competitor's customers.

Input: one or more competitor LinkedIn company URLs (linkedinCompanyUrls) and/or the LinkedIn profile URLs of specific care-team members to watch (linkedinProfileUrls, up to 500, e.g. https://www.linkedin.com/in/marie-dupont) — at least one of the two is required to activate. A person named in linkedinProfileUrls produces leads only once they have accepted our connection request, which can take days; someone who never accepts produces none. On a live signal, PATCH /api/v1/signals/{signal_id} with a new linkedinProfileUrls list starts watching the people you added and stops watching the people you removed (send the full list you want). Plus optional filters (persona/ICP: targetPersonas, customPersonaTitles, companySizeFilters, locations, excludedLocations, industryFilters, excludedCompanySizeFilters, excludedTitles, excludedCompanyUrls), enrichment options (getEmails, getPhones, detectTechnologies), and your webhookUrl and dailyLeadLimit.

Output: every new 1st-degree connection to the monitored competitor's care team, matching your config filters, is pushed to your webhookUrl as an enriched lead with contact details (name, title, location, email/phone if enabled, LinkedIn profile) and company info, plus the monitored competitor (signal.tracked_company) and the care-team member the lead connected with (signal.tracked_contact); non-matching connections are filtered out.

Use cases:

  • Steal-the-customer outreach — these people are (becoming) a competitor's customers; pitch a migration with a switch offer.
  • Renewal-timing plays — sequence them toward likely contract-renewal windows.
  • Competitive intelligence — map who your competitors are onboarding to gauge their momentum.
post/api/v1/signals/competitor-customer-care

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/competitor-customer-care
  • 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": [
      "51-200",
      "201-500",
      "501-1000"
    ],
    "customPersonaTitles": [
      "VP of Operations"
    ],
    "detectTechnologies": false,
    "excludedCompanySizeFilters": [
      "Self-employed",
      "1-10"
    ],
    "excludedCompanyUrls": [],
    "excludedIndustryFilters": [],
    "excludedLocations": [],
    "excludedTitles": [
      "Intern"
    ],
    "getEmails": true,
    "getHomepageContent": false,
    "getPhones": false,
    "getSireneData": false,
    "industryFilters": [
      "Software Development"
    ],
    "linkedinCompanyUrls": [
      "https://www.linkedin.com/company/lemlist",
      "https://www.linkedin.com/company/la-growth-machine"
    ],
    "locations": [
      "France"
    ],
    "targetPersonas": [
      "Operations Director",
      "Head of Revenue"
    ]
  },
  "dailyLeadLimit": 50,
  "name": "Customers of our top competitors",
  "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.