Ad Engagement Signals

We send the companies engaging with your LinkedIn, Google and Meta ads to Slack, Teams, Clay or your CRM, along with what they did on each channel. Only companies with no deal in your CRM yet, and each one once.

How it works

  1. Pick where the companies go. Your CRM, a Slack or Teams channel, Clay, or an automation tool
  2. Pick which ad channels feed it, and who counts as a fit
  3. It runs on your schedule and sends only what is new since last time

Companies come from LinkedIn Ads, Google Ads and Meta Ads, depending on which ones you tick and which you have on your plan. A company engaging on two channels arrives once, with both named.

Who gets sent

A company qualifies when all of these are true:

  • It engaged with your ads in the last 30 days
  • It has no deal in your CRM. The one exception is a company whose deals were all lost, with the latest loss more than six months ago
  • It matches your ideal customer profile, if you set one
  • It has not already been sent by this signal, unless a repeat trigger fires

When you set up a signal you also pick which engaged companies it draws from. Warm accounts (the default, marked Recommended) only takes companies that are new or engaging at least twice as much as last month. It's the same list as Warm accounts on Company Insights. Engaged takes every company that clicked or reacted to an ad, or came to your site from one.

Ideal customer profile

This is where you set your ICP. Pick the industries, company sizes and countries you actually sell to, and anything outside it never gets sent.

Sending a company again

Each account is sent once. To get sent again a company needs one of these, and you pick which ones count:

  • It starts rising fast: sent as a new company before, now accelerating
  • It turns up on a new channel: warm on LinkedIn before, now visiting from Google Ads too
  • It comes back after going quiet: gone from the list for 30 days or more, then back

Nothing is sent twice inside 30 days, whichever of these fires.

Preview mode

New signals can't be put in preview. The last step of the setup shows who the first run would send, and that is your preview. Some older signals were set up in preview mode, and they stay in it until you press Start sendingon the signal's page. While a signal is in preview it writes nothing anywhere. Nothing goes to Slack, nothing is written to your CRM, nothing is recorded as sent.

Where signals can go

Your CRM, and any of these.

  • Slack (hooks.slack.com). One message a run, not one per company. How to create a Slack webhook
  • Microsoft Teams (logic.azure.com or powerplatform.com). Use a Power Automate Workflows URL. The old Office 365 connector was switched off by Microsoft in May 2026 and a webhook.office.com address will not work
  • Clay (api.clay.com). One row per company, ready to enrich
  • Zapier (hooks.zapier.com). One call a run, so it costs one task rather than one per company
  • n8n (your instance). Use the Production URL, not the Test one
  • Make (hook.eu1.make.com or your region)

One signal can send to several places at once, and each CRM you have connected can be picked separately.

What lands in your CRM

Six fields on the company record, in their own field group, separate from the fields CRM Sync writes:

  • Signal type: New, or Rising fast
  • Signal date: when Fibbler last surfaced the company
  • Signal name: which signal found it
  • Signal channels: LinkedIn, Google Ads or Meta Ads
  • Signal why: the evidence, in one line
  • Created by Fibbler: set only on records we created, so you can find and remove them without touching your own

The list in your CRM

Each signal also keeps a list, named after the signal. A company keeps its place in it for 30 days, then drops out. The record, the fields and the history stay.

  • HubSpot: a static list, under Segments
  • Attio: a list, with an entry per company. Attio's API has no way for us to pick a view or its columns, so you do that once. See below
  • Pipedrive: a saved filter on organisations
  • Salesforce: an Account list view

A note is added to the company in Attio, Salesforce and Pipedrive saying why it was surfaced.

Creating the Salesforce fields yourself

We create these on the Account object the first time a signal writes to Salesforce. If the connected user cannot create fields, or you would rather make them yourself, here is the full set.

Field LabelAPI NameData TypeHolds
Fibbler Signal TypeFibbler_Signal_Type__cText(255)New, or Rising fast
Fibbler Signal DateFibbler_Signal_Date__cDate/TimeWhen Fibbler last surfaced the company
Fibbler Signal NameFibbler_Signal_Name__cText(255)Which signal found it
Fibbler Signal ChannelsFibbler_Signal_Channels__cText(255)LinkedIn, Google Ads or Meta Ads
Fibbler Signal WhyFibbler_Signal_Why__cText(255)The evidence, in one line
Created by FibblerFibbler_Created__cCheckboxSet only on records Fibbler created

Go to Setup, then Object Manager, then Account, then Fields & Relationships, then New. Use the label from the table, and for Field Name type the API name without the trailing __c, which Salesforce adds itself. Then make the field visible to the profile of the Salesforce user connected to Fibbler, or we cannot see it and will try to create it again.

The list view a signal builds is called Fibbler: followed by the signal's name. If you cannot find it, search your Account list views for the signal's name.

Setting up the Attio list

A list created through Attio's API arrives without a view, so opening it shows "Start with a view" and looks empty. The companies are already in it. Attio has no API for views or columns, so this is two clicks, once per signal.

  1. Choose Table. Kanban arranges records by stage and these have none, so it would be a single column
  2. Add these columns
  • Fibbler Signal Type: new, or rising fast
  • Fibbler Signal Why: the evidence
  • Fibbler Signal Channels: where the company engaged
  • Fibbler Signal Date: when it was surfaced, so the newest sort to the top

Not Fibbler Signal Name. Every company in the list came from the same signal, so that column repeats one value all the way down.

What a message looks like

One message a run, with the companies in it. Each one carries its name, what we know about it, why it was surfaced, a link to its LinkedIn page and a link to its record in your CRM.

Automation tools get the whole run as one call, with the companies nested inside it, so a run costs one task rather than one per company. Each company looks like this:

{
  "dedupeKey": "example.com",
  "dedupeKeyType": "domain",
  "changeType": "new",
  "company": {
    "name": "Example Ltd",
    "linkedinUrl": "https://www.linkedin.com/company/example",
    "domain": "example.com",
    "industry": "Software Development",
    "employeeBand": "201-500",
    "country": "SE"
  },
  "signal": {
    "type": "new",
    "channels": ["linkedin", "google_ads"],
    "crmUrl": "https://app.hubspot.com/contacts/1234567/record/0-2/8901234"
  },
  "evidence": {
    "linkedin": {
      "engagements": 49,
      "impressions": 900,
      "trendPct": 122,
      "topCampaigns": ["EOR Mid-market"]
    }
  }
}

For a company we only know from LinkedIn there is no domain, so the LinkedIn page is the key to deduplicate on.

What was sent, and why

Each signal records every run: how many companies matched, how many were sent, and how many were held back and why. Below it is every company the signal has ever sent, when it first went out, how many times, and whether we created the CRM record. Export the whole thing as a spreadsheet.

When a destination refuses a signal

A destination can be reachable and still turn the data away, most often because an account limit at the other end has been hit. On signals set up in the current version, nothing gets paused: the run shows as failed, those companies aren't marked as sent, and we try them again on the next run. On older signals, the signal's page shows which destination it was, since when, and the destination's own words, quoted rather than translated into something vaguer. There are two outcomes:

  • The destination is refusing the data. The signal stays switched on. This is something to change at the destination, for example raising a record limit or clearing space, and sending resumes by itself once it accepts data again. There is nothing to re-enable in Fibbler.
  • The webhook URL is no longer valid. The signal is paused, because there is nowhere to send to. Replace the URL on the signal and switch it back on.
The difference matters, because a refusal used to look like a broken connection. If the notice says the destination is refusing the data, re-creating the webhook will not help. The message quoted on the page is what to act on.

Schedule and limits

  • Every morning runs early each day
  • Every Monday morning runs once a week
  • Per run: a cap on how many companies one message may carry. The warmest go first and the rest roll to the next run
  • How many signals: 3 on the Growth plan and during the free trial, and as many as you like on Unlimited and Agency

You can also run a signal straight away from its page, without waiting for the schedule.