Introduction to Signals APIs

Signals APIs provide developers and GTM teams with programmatic access to the real-time digital behaviors that indicate opportunity, risk, or intent across millions of online businesses. These APIs deliver the same Sales Signals used inside Similarweb Sales Intelligence - such as traffic shifts, technology changes, buyer intent, and market-specific events - but made available as structured, queryable data that can integrate directly into your CRM, internal systems, scoring models, or automation workflows.

This guide introduces how Signals APIs work, what signals they include, and how to begin integrating them into your sales or customer success stack. Whether you are building advanced lead-scoring models, enriching account intelligence, or automating outreach triggers, Signals APIs offer the foundational data layer needed to drive a truly insight-driven sales motion.

Track real-time changes with Signals

Sales signals are automated alerts that highlight meaningful changes at target accounts. They show sales teams when something important happens so reps know when to reach out and what to say. 

There are 5 types of signals available:

Traffic: Alerts you when there is a change in websites' traffic. For example:

  1. Identify websites whose visits, page views, or unique visitors have increased or decreased.

  2. Identify websites whose visits from a specific marketing channel have increased or decreased.

  3. Identify websites whose engagement metrics increased or decreased.

  4. Identify websites that are starting to get significant traffic from a new country. 

The traffic signals help prioritize companies that are gaining momentum in a new market, or losing traction and may need your solution.

News: Alerts you when a company has news. For example:

  1. Leadership change: New executive hiring, Promotions, Executive has left the company, etc. 

  2. Growth: Company opens new services, Expending offices, Client signing, etc.

  3. Strategy: Acquisitions, Merging, Partnerships, etc. 

  4. Investment: Fundings, Loans, Investment in other companies, etc.

  5. Challenges: Closing offices, layoffs, etc.

Technology: Alerts you when there is a change in the company's tech stack. For example:

  1. Recently installed / removed a competitors 

  2. Recently installed / removed s supported integration 

  3. Competitor renewal coming up

The Technology signals help prioritize companies that may be evaluating options.

Ad network activity: Alerts you when a website starts or stops working with an ad network.

For AdTech companies, agencies, and publishers, these signals are critical indicators of a prospect's digital strategy shifts, budget reallocation, or dissatisfaction with current vendors.

Intent: Alerts you when companies in your target audience are actively researching specific topics that are relevant to your business. This is third-party data coming from Bombora. You can select from over 17K business and technology topics to track.

Intent signals allow you to identify companies that are researching what you sell before they even contact you. That way you reach out to potential customers earlier in their buyer journey, often before your competitors do.

Note: For signals based on visits, page views, visitors, and marketing channel metrics, we'll only raise an alert if the absolute value exceeds 500.

The rationale behind this is that large percentage changes in low-volume data are often not actionable. For instance, a 100% increase in page views from 10 to 20 is not meaningful enough in absolute terms to warrant attention.

Find the best signals that match your industry needs in the signals play book.

Methodology

The Sales Signals API lets you set up, manage, and receive signals about important events for domains you care about. You can configure what you track, how you receive notifications, and review the history and status of all your signals.

The signals API using webhooks. Webhook is an endpoint (URL) where the API sends notifications about signals you've set up. The Webhooks are working in a “Push” model as opposed to “Pull” model. This means that whenever a new signal is detected, we will push it into your own system  eliminating the need for you to repeatedly request the data.

Pricing

The pricing is based on two factors:

  1. Which package you select Basic or +Intent signals (intent is a premium tier)

  2. How many domains you monitor (tiered pricing: higher volume, lower unit price). You can track as many signals as you want for these domains. 

The reason the pricing is “per domain” is because it is more predictable rather than the number of unknown signals that will occur.

Configuration

Signals API can be configured and used in 2 different ways:

  1. Configuration through the platform UI

Best For: Monitoring a fixed, pre-defined set of domains, where the list doesn't change frequently.

Click here for a full how-to guide

  1. Configuration using API only

Best For: Real-time, scalable operations that require syncing with your CRM or other internal systems (e.g., "monitor every new lead automatically").

Click here for a full how-to guide.

Also included in this manual:

How to set-up Sales Signals API in Salesforce

How to set-up Sales Signals API in Hubspot

Appendix: Signals output by signal type

Configuration through the platform UI 

Prerequisites: To access the Signals API through the platform, you must have admin permissions.

How it works 

Step 1: Choose Signals

Go to the navigation bar → Click on Integrations (under Tools & Management) → search for the  Signals API section and Click “manage” → Click “Manage signals” on the top right corner.


In the “My signals Management" window you can choose the exact signals you want to get alerted on.

Note :This Manage signals page will only affect the API signals. If you already configured signals through the ‘Lead Generation’ or ‘My Lists’ in the platform, adding signals on this page won’t affect them. 








 



Note: When setting up the signals API in the user interface, the selection of countries for traffic origin is restricted to the Country Filters included in your purchased plan.


 

Step 2: Choose domains you want to track 

Click on "Manage domains” and decide between adding domains to the existing list, or replace the existing list. In both options you will then upload a csv of domain in the tricked domain will be updated.

The number of domains you can track is determined by the plan you’ve purchased. You will be unable to proceed with configuration if the number of domains you add exceeds the limit permitted by your current plan.

 

Note: 

  • If a domain that is already in the list will be added again no error should accrue and you will not be charged twice. 

  • After updating the domain list, new domains may take up to 3 minutes to appear in the UI.

Step 3: Set the endpoints for signals alerts:

In the bottom of this page you choose which type of signals you want to attach to each webhook URL.

You can set up up to 5 webhooks simultaneously. It is recommended to create separate webhooks per signal type because each type has a different data structure.

The "Signals batch limit" option determines how many signals accumulate before an alert is triggered. If you set the limit to 1, you will be alerted immediately for every signal that occurs. If you set the limit to any other number, the system will wait until that specified number of signals is reached before sending an alert.

In order to see the structure of a specific signal you can create a test using the following steps:

  1. Go to any Webhook testing tool (e.g. webhook.site) and create a new webhook URL

  2. Enter the URL into the URL field in the SI platform, choose a signal type and click “Test”

  3. Go back to the webhook testing tool, and see the request content - this is the full schema.

  4. Optional: you can copy the request content to any JSON viewer tool for a more friendly view. 

Once you finish testing you can go ahead and fill the URL field with the desired webhook URL for your alerts. 

To complete the setup of the Signals API, you must supply a unique webhook URL. This URL is obtained from the system you intend to connect to, and the exact process for doing so will vary by system.

For example, let's see how it works for Slack:

  1. First, you have to complete the tests for the desired signal type, in order to see the available variables.

     

  2. Open your Slack app and find the + button above your profile picture  

     

  3. Create a new Workflow on Slack and give it a name (e.g. “Traffic Signals”) 

  4. Choose an event - “From a webhook”

     

  5. Click "set up variables" and input the specific variables relevant to you, which you found in the test for the corresponding signal types. Click ‘Done’ to insert the variable. Repeat this step for each variable.

     

  6. Once you finish inserting all the desired variables click “Continue”.

     

  7. Add at least 1 step to your workflow, to choose what will happen when an alert arrives. (For example: “Send a message to a channel”)

     

  8. Select the desired channel and compose the alert message, including any or all available variables. Click Save to confirm.

     

  9. Go back to the Webhook settings (by clicking on the edit symbol next to “start with a webhook”) and copy the Web request URL.


  1. Paste this URL back in the platform in the URL field (Replacing the testing URL). 

     

  2. Since Slack does not support batch processing, you must set the batch limit to 1.

     

  3. Finish up and publish the workflow on slack.

     

  4. Go to the platform and click “Test”. You will get an example message of the desired signal into your slack. 

For a full Signals API Slack set up video tutorial click here

Similar configurations are possible across various other workflow tools.

 


Configuration using API 

Prerequisites: You must have a similarweb API key. 

Full API documentation here

Step 1: Get Valid Parameters (The Description Endpoint)
The Description endpoint returns supported parameters and valid options for each signal. Call this to get a list of supported values: allowed percentages, metrics, periods, thresholds and directions for traffic and new market signals

Endpoint: http://api.similarweb.com/v4/sales-signals/describe

What You Get from Description:

  • List of topics and countries for intent signals

  • List of technologies for technology signals

  • List of Ad networks and directions for Ad network signals

  • List of news items for news signals

Practical tip: Always check the description endpoint before configuring or changing signals. Don't guess.

Step 2: Define "What" to Track (Create Signals)

Tell the system what events matter to you. You can create multiple signal rules.

 You can create different signals type using different POST requests:


 

  1. Signals - Create Traffic Changes

Endpoint: http://api.similarweb.com/v4/sales-signals/signals/traffic

Method: POST

Body: {

    "traffic_changes":{

        "metric": "string",

        "direction": "string",

        "period": "string",

        "country": "string",

        "value": "number"
}

}



 

  1. Signals - Create New Market

Endpoint: http://api.similarweb.com/v4/sales-signals/signals/traffic

Method: POST

Body: {

  "new_markets": {

    "metric": "string",

    "countries": ["string"],

    "threshold_value": "number"

  }

}


 

  1. Signals - Create News 

Endpoint: http://api.similarweb.com/v4/sales-signals/signals/news

Method: POST

Body: {

  "categories": ["string"],

  "period": "string"

}


 

  1. Signals - Create Intent

Endpoint: http://api.similarweb.com/v4/sales-signals/signals/intent

Method: POST

Body: {

  "topics": ["string"],

  "countries": ["string"]

}


 

  1. Signals - Create AdNetworks

Endpoint: http://api.similarweb.com/v4/sales-signals/signals/ad-network

Method: POST

Body: {

  "ad_network_ids": ["string"],

  "action": "string"

}



 

  1. Signals - Create Technology

Endpoint: http://api.similarweb.com/v4/sales-signals/signals/technology

Method: POST

Body: {

  "period": "string",

  "type": "string",

  "technology_categories": ["string"],

  "technology_sub_categories": ["string"],

  "technologies": ["string"]

}


 

Process:

  • Decide what type of signal you need

  • Check the description endpoint for required/allowed values

  • Use the relevant signal creation endpoint and fill in the model with all required 

Parameters.


 

Error Handling: If you submit a value that's not supported (wrong percentage, metric, action, etc.), you'll get a specific error. You cannot set up something the API doesn't allow.


 

Managing Signals

  • Signals - Get All
    If you wish to see all your configured signals use this endpoint:

Endpoint: /v4/sales-signals/signals/all

Method: GET

No request body required.



 

  • Signals - Archive
    If you wish to deactivate/(pauses) a specific signal by ID you use this: 
    Endpoint: http://api.similarweb.com/v4/sales-signals/signals/archive

Method: POST

Body: {

   "id": "string"

}


 


Step 3: Define "Where" to Send Alerts (Configure Webhooks)

Tell the API where to push the data when a signal is detected.

Webhooks - Add
URL: Where notifications should be sent
Signals per hook: How many signal events are sent in each HTTP request
Signal types: Which types of signals should use this URL (can be specific or "all")

Endpoint: http://api.similarweb.com/v4/sales-signals/webhook-subscriptions/add
Method: POST
Body:{
"callback_url": 
"https://hooks.slack.com/triggers/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",
"signals_per_hook": 1,
"signal_types": ["technology","traffic","adNetwork","news","intent"]
}


Webhooks - Archive
Deactivate an existing webhook by its ID (stops sending notifications)

Endpoint: http://api.similarweb.com/v4/sales-signals/webhook-subscriptions/archive

Method: POST 

Body: {

"id": "string"

}


Once created, the webhook starts receiving events immediately.


 

Managing Webhooks

  • Webhooks - Get All Subscriptions
    If you wish to see all your webhooks, their status (active/deactivated), which signal types they cover, how many signals per hook, and a creation timestamp, use this Endpoint: http://api.similarweb.com/v4/sales-signals/webhook-subscriptions/all
    Method: GET
    No request body required.


Step 4: Define "Who" to Track (Subscribe Domains)

Specify What Companies to Track. You must subscribe domains to receive signals about them.

The number of domains you can track is determined by the plan you’ve purchased. If the number of domains you add exceeds this limit an error will occur.

Domains - Subscribe
Endpoint: http://api.similarweb.com/v4/sales-signals/domains/subscribe
Method: POST
Body: {
"domains": ["string"]
}

Domains - Unsubscribe

Endpoint: http://api.similarweb.com/v4/sales-signals/domains/unsubscribe

Method: POST
Body: {

 "domains": ["string"]

}

 

Pro tip: Automate subscriptions using your CRM. For example, subscribe a domain when a new lead/account/contact is created in Salesforce or HubSpot. Unsubscribe when an account is no longer relevant (e.g., changes status in CRM).


 

Step 5: Events: Monitoring, Troubleshooting, and Resend

Every signal notification sent by the API is an event. The event's endpoints let you search, monitor, and retry signal deliveries.


 

Events - Resend
Use to send endpoint for all failed events in the past two months
Filter by period or specific event IDs for more targeted resends

Endpoint: http://api.similarweb.com/v4/sales-signals/events/resend

Method: POST

Body:{

"subscription_id": "string",

  "date_from": "integer",

  "date_to": "integer",

   "status": "string",

"ids": ["string"]

}


 

Events - History

Search by event ID, status (notified, failed), date range, or subscription ID (webhook)
Results are paginated due to potentially high volume. For now, you can access two months of history 
Endpoint: http://api.similarweb.com/v4/sales-signals/events/history
Method: POST
Body: {
"subscription_id": "string",
"date_from": "integer",
"date_to": "integer",
"status": "string",
"ids": ["string"]
}


 

Common Pitfalls and Strong Recommendations

  • Don't assume: The API will only accept pre-defined values. Always query the description endpoint first

  • Error handling is strict and helpful: Expect clear errors for any unsupported parameter

  • Automate where possible: Use your CRM's workflow automation to subscribe/unsubscribe domains

  • Monitor event failures: Integrate event status checks and resending into your ops processes

  • Keep your webhooks secure: Make sure only the API can access your endpoint URLs


 

Summary Flow Example

  1. Query the description endpoint

  2. Create signals with required and supported parameters

  3. Set up webhooks for each type of signal you want to receive

  4. Subscribe domains to monitor

  5. Monitor events - check for failures, and resend as needed

  6. Manage - deactivate signals or webhooks when they're no longer relevant


Salesforce Integration with Sales Signals API

This manual provides a detailed and straightforward explanation of how to connect Salesforce to the Similarweb Sales Signals API.
You’ll learn how to subscribe (and unsubscribe) domains for monitoring automatically, and how to receive real-time signals back into Salesforce using no-code tools (Flows) or code (Apex).

How it works:

  • Salesforce “watches” your Accounts or Leads for changes (like a new Customer, or an opportunity opened).

  • When the right event happens, Salesforce automatically subscribes the domain (website) to Similarweb for monitoring, using the Sales Signals API.

  • When a domain no longer matters (lost deal, account closed), Salesforce unsubscribes it from monitoring automatically.

  • Signals are sent by Similarweb back to Salesforce, updating your CRM in real time.

Pre-requisites & What You’ll Need:

  • Salesforce Admin permissions (or someone with permissions to edit Flows/Apex, create sites, manage external services).

  • A valid Similarweb Sales Signals API key (Bearer token - get this from your IT or Similarweb admin).

  • The website field available on Accounts or Leads in Salesforce (standard or custom field).

  • For webhooks: Ability to create a Salesforce Site and Apex class.


 

Step 1: Setting Up API Access in Salesforce

This step lets Salesforce securely call the Sales Signals API without hardcoding secrets and subscribe or unsubscribe domains.

Create a Named Credential for Secure API Calls:

  1. In Salesforce, go to Setup.

     

  2. Search for Named Credentials.

     

  3. Click New Named Credential.

     

  4. Fill in:

  1. Label/Name: e.g. SimilarwebSignalsAPI

  2. URL

  3. Identity Type: Named Principal

  4. Authentication Protocol: Bearer Token (or “Custom Header” if needed)

  5. Token: Paste your API key/token

     

  1. Save

Step 2: Creating and Managing Signals: API and UI Options

Before automating domain subscription, you must define the types of sales signals (alerts) you want Similarweb to track. Signals can be created and managed in two ways:

Option A: Create Signals Using the API

You (or your technical team) can create, update, or deactivate signals directly by sending API requests to the relevant endpoints (such as /v4/sales-signals/signals/traffic, /signals/news, /signals/intent, etc.). Each signal type requires specific parameters (see your API schema).

For Example: To create a new market signal, send a POST request to /v4/sales-signals/signals/traffic with this body:

{

  "new_markets": {

    "metric": "visitors",

    "countries": ["US", "DE"],

    "threshold_value": 1000

  }

}

To see all available setup options/fields, use:

GET /v1/sales-signals/description?api_key={your_api_key}

Option B: Create Signals Using the UI

Log in to the Similarweb and Use the dedicated Signals API management page to create, edit, or delete signals visually

This is best for a quick setup.

See the guide above for detailed explanations of both options.

Step 3: Automate Domain Subscription using Salesforce Flow (No-Code)

Salesforce Flows let you set up automations without writing code. You can trigger a Flow when an Account is created/updated and meets your criteria.

Example use case: Subscribe a domain when an Account status changes to “Customer”

  1. Go to Setup → Flows → New Flow

     

  1. Choose “Record-Triggered Flow”

    1. Object: Account

    2. Trigger: When record is created or updated

    3. Condition Example:
      Account.Status__c EQUALS "Customer"

       

  2. Add an Action: HTTP Callout

    1. If your Salesforce org has External Services, register the API endpoint to create a ready-made callout action.

    2. If not, use Apex action: (See Appendix at bottom: copy-paste code provided)

       

  3.  Configure the Callout:

    1. Method: POST

    2. URL: https://api.similarweb.com/v4/sales-signals/domains/subscribe

    3. Authentication: Use your Named Credential

    4. Headers:

  • Content-Type: application/json

  • Authorization: Bearer [Your API Key] (or use Named Credential for this)

  1. Body:

{
"domains": ["{!$Record.Website}"]
}


(Replace Website with your actual field if different)

  1. Save and Activate the Flow

Step 4: Automate Unsubscribing Domains

Repeat step 2, but trigger on Account status change to “Closed”/“Lost”/“Disqualified”, and POST to: https://api.similarweb.com/v4/sales-signals/domains/unsubscribe

Body:

{
"domains": ["{!$Record.Website}]"
}

This keeps your signals list clean and avoids monitoring irrelevant domains.

Step 5:  Receiving Sales Signals in Salesforce (Webhook Setup)
This step enables Salesforce to receive real-time alerts from Similarweb.

  1. Create a Public Site in Salesforce

  1. Go to Setup → Sites.

  2. Register your Site Domain (if not done before).

  3. Click New, fill in required info, set your Visualforce Page as Active Site Home, and Save.

  1. Create a Visualforce Page

  1. Go to Setup → Visualforce Pages → New

  2. Name it (e.g., SalesSignals).

  3. Make it available for Lightning and Experience sites. Save.

     

  1. Create RESTful Apex Class for Webhook

  1. Go to Setup → Developer Console → New Apex Class

  2. Name: SalesSignalsWebhookListener

  3. Paste this template:

@RestResource(urlMapping='/signals/*')

global class SalesSignalsWebhookListener {

    global class Signal {

        public String message;

        public String site;

        // Add more fields as needed from Similarweb signals

    }

    @HttpPost

    global static void Handle(Signal[] signals) {

        for(Signal item: signals){

            List<Account> accs = [SELECT Id, Website FROM Account WHERE Website = :item.site LIMIT 1];

            if(accs.isEmpty()) continue;

            accs[0].LastSignal__c = item.message;

            update accs[0];

        }

    }

}

Adjust mapping and logic as needed for your use case.

 

  1. Grant Site Guest User Access 

  1. Go to Setup → Sites → [Your Site] → Public Access Settings

  2. Apex Class Access: Add SalesSignalsWebhookListener

     

  1. Create Webhook URL
    Your webhook endpoint is:
    [YourSiteDomain]/services/apexrest/signals

Example:
https://yourorg.force.com/services/apexrest/signals

  1. Register Webhook in Sales Signals API

Add your Salesforce webhook URL in Similarweb’s system, using the /webhook-subscriptions/add endpoint or the UI.

Choose which signal types to receive.


 

Testing & Troubleshooting

  • Test domain subscription: Change an Account’s status; confirm the call to Similarweb.

  • Test receiving signals: Simulate a signal event (or ask Similarweb support to send a test). Check the Account in Salesforce for updates.

  • Check logs: Use Salesforce debug logs and error emails.

  • Handle errors gracefully: Add error handling to your Flow or Apex for troubleshooting.


Best Practices & Tips

  • Only subscribe domains you care about (active customers, key prospects).

  • Unsubscribe when accounts are no longer relevant.

  • Log all API calls and status for auditing.

  • Monitor API limits and errors.

  • Document your automations for future admins.

  • Map signals to tasks, cases, or lead scoring for maximum value.

     

Appendix: Apex Example for API Callout
If you need to use Apex for the API call (instead of Flow):

public class SimilarwebDomainSubscribe {

    @InvocableMethod(label='Subscribe Domain to Sales Signals API')

    public static void subscribeDomains(List<String> websites) {

        for (String website : websites) {

            HttpRequest req = new HttpRequest();

            req.setEndpoint('https://api.similarweb.com/v4/sales-signals/domains/subscribe');

            req.setMethod('POST');

            req.setHeader('Authorization', 'Bearer YOUR_TOKEN_HERE');

            req.setHeader('Content-Type', 'application/json');

            req.setBody('{"domains":["' + website + '"]}');

            Http http = new Http();

            try {

                HttpResponse res = http.send(req);

            } catch (Exception e) {

                // Add error logging or notifications here

            }

        }

    }

}

You can use this as an Invocable Action in Flow.

Frequently Asked Questions (FAQ)

Q: What field should I use for “domain”?
A: Usually the Website field on Account or Lead. If your CRM uses something else, update the Flow/Apex accordingly.

Q: Can I subscribe multiple domains at once?
A: Yes. Just provide an array of domain strings in the API call.

Q: What if my Flow/Apex fails?
A: Use Salesforce error handling: send yourself a notification, log the failure, and review API call limits.

Summary

With these steps, any Salesforce admin or consultant can set up an automated, scalable, and robust integration between Salesforce and Similarweb Sales Signals API:

  • Automate subscription/unsubscription for domains

  • Receive signals directly in Salesforce

  • Optimize your GTM workflow with zero manual effort

 


HubSpot Integration with Sales Signals API

This manual gives you a clear, step-by-step guide to integrating HubSpot with the Similarweb Sales Signals API. You will learn how to:

  • Define what signals you want (traffic, new markets, etc.)
  • Automate subscribing/unsubscribing companies/domains using HubSpot workflows
  • Use Zapier to receive real-time signals and update HubSpot records with them
  • Avoid common mistakes and maximize automation

How It Works
You tell Similarweb what you want to monitor (create signals via API or UI)

  • HubSpot automatically subscribes or unsubscribes domains via workflow automation
  • When a signal event happens, Similarweb notifies you via webhook (using Zapier as the middleware)
    Zapier updates HubSpot records (Companies) in real time, based on incoming signals

Prerequisites

  • Access to HubSpot with workflow automation & custom code actions enabled
  • Zapier (or similar platform) account for webhook handling
  • Sales Signals API key (get this from your Similarweb admin)
  • Admin or developer permissions in HubSpot


Step 1: Creating & Managing Signals (API & UI)

Before you can monitor anything, you must define the signals you want Similarweb to generate. Signals can be created and managed in two ways:

Option A: Create Signals Using the API

  • Use the relevant endpoint per signal type
  • Example for Traffic Change Signal:


 

{

  "traffic_changes": {

    "metric": "unique_monthly_visitors",

    "direction": "grew",

    "period": "mom",

    "country": "US",

    "value": 15

  }

}

To see all available setup options/fields, use:

GET /v1/sales-signals/description?api_key={your_api_key}


 

Option B: Create Signals Using the UI

Log in to the Similarweb and Use the dedicated Signals API management page to create, edit, or delete signals visually

This is best for a quick setup.

See the guide above for detailed explanations of both options.

 

Step 2: Automating Domain Subscription (HubSpot Workflow & Code)

To automate which companies you monitor, set up a HubSpot workflow that subscribes domains (websites) to the API. This ensures you’re always watching the right companies, with no manual effort.

Example: Subscribe Domains When New Company Is Created

  1. Create a New Workflow in HubSpot (Object: Company)
  2. Set Trigger: Company is created (or any custom trigger you want)
  3. Add Custom Code Action: Use Node.js code below:



 

const axios = require('axios')


 

exports.main = (event, callback) => {

  const website = event.inputFields['website'];

  const requestBody = {

    "domains": [website]

  };


 

  axios

    .put(

      'https://api.similarweb.com/v1/sales-signals/domains/subscribe?api_key={your key}',

      requestBody,

      {  }

    )

    .then(response => {

      console.log(`Response from Similarweb: ${response.body}`);

    });

};


 

You can also automate unsubscription: Use similar logic and POST to /domains/unsubscribe when company is deleted, status changes, etc.

Alternative: You may use Zapier for this, but native HubSpot workflows offer better reliability and auditing.

Step 3:  Receiving Signals in HubSpot (Zapier Webhook)

Because HubSpot does not yet support direct webhook ingestion flexibly, use Zapier as middleware to handle incoming signals.



 

 

Step-by-Step: Zapier Signal Flow: 

  1. Catch Hook:
  1. In Zapier, create a new Zap
  2. Use “Webhooks by Zapier” → “Catch Hook”
  3. Zapier generates a webhook URL – copy this

     
  1. Configure Webhook Subscription in Similarweb:
    Go to the API or Signals API management UI, and set your Zapier webhook URL as the destination for signals:
    Note: Always set SignalsPerHook to 1 (Zapier can't handle batches)

     
  2. Zapier Step: Parse the JSON Payload
  1. Example payload Similarweb sends:

{

  "site": "example.com",

  "eventDate": "2025-01-03T14:30:00",

  "metricValue": 10,

  "country": "US",

  "message": "US total estimated visits grown by 10% in the last month"

}


 

  1. Set up Zapier to extract these fields


 

  1. Find Company in HubSpot
  1. Add HubSpot action: “Find Company”
  2. Use site or relevant property to match the company through it’s domain

     
  1. Update Company in HubSpot
  1. Add HubSpot action: “Update Company”
  2. Choose fields to update (e.g., custom field “Last Signal” with the message)

     




 

End-to-End Workflow Example

  • Create signal(s) in API/UI (define what you want to track)
  • Set up HubSpot workflow to subscribe companies
  • Register Zapier webhook URL in Similarweb
  • Zapier receives events → finds correct HubSpot company → updates record
  • Your CRM is always up-to-date, no manual effort required

Testing & Troubleshooting

  • Test your workflow: create a test company in HubSpot and verify domain is subscribed
  • Trigger a sample signal in Similarweb (test mode or real event)
  • Use Zapier “Test Trigger” to check payload
  • Check that HubSpot company records update as expected
  • Handle errors in code actions gracefully (log or notify failures)

Best Practices & Tips

  • Always use SignalsPerHook: 1 for Zapier webhooks
  • Use meaningful signal names and document your workflows
  • Audit domain subscriptions and workflow execution in HubSpot regularly
  • Remove or update signals and webhooks as your GTM focus changes
  • Map signals to actionable fields (e.g., lead score, owner notification)
  • Test the whole flow before relying on it in production


Appendix: Signals output - what is received in the webhook per signal type


 

The following are examples of the JSON output for each signal type


 

Intent signals

{

  "events": [

    {

      "topic": ".NET",

      "countries": [

        "United States"

      ]

    },

    {

      "topic": "Digital Sustainability",

      "countries": [

        "United States",

        "Canada"

      ]

    }

  ],

  "event_id": "a7b8c9d0-e1f2-3456-789a-bcdef0123456",

  "site": "intent-example.com",

  "event_date": 1753451427,

  "signal_id": "6d781126-1f02-40e3-bfc0-1f5eedf5b182",

  "signal_type": "Intent",

  "message": "intent-example.com showed intent in the last week on 2 of your topics"

}






 

News signals

{

  "news": {

    "title": "NewsExample company promoted John Doe to CEO on Jun 20th '25.",

    "url": "https://www.example-news.com/business/corp-leadership-changes",

    "article_sentence": "On June 20, NewsExample announced the immediate promotion of John Doe to CEO of NewsExample North America.",

    "article_body": "Full article content"

  },

  "period": "month",

  "event_id": "a7b8c9d0-e1f2-3456-789a-bcdef0123456",

  "site": "news-example.com",

  "event_date": 1753451427,

  "signal_id": "6d781126-1f02-40e3-bfc0-1f5eedf5b182",

  "signal_type": "News",

  "message": "news-example.com promoted CEO."

}


 

Ad networks signals

{

  "ad_network": "Google Display Network",

  "action": "startedWorkingWith",

  "event_id": "a7b8c9d0-e1f2-3456-789a-bcdef0123456",

  "site": "ad-network-example.com",

  "event_date": 1753451427,

  "signal_id": "6d781126-1f02-40e3-bfc0-1f5eedf5b182",

  "signal_type": "Ad Network",

  "message": "ad-network-example.com started to work with Google Display Network"

}


 

New market traffic signals

{

  "threshold": 50000,

  "metric": "monthly_visits",

  "metric_value": 60000,

  "country": "Worldwide",

  "event_id": "a7b8c9d0-e1f2-3456-789a-bcdef0123456",

  "site": "new-market-example.com",

  "event_date": 1753451427,

  "signal_id": "6d781126-1f02-40e3-bfc0-1f5eedf5b182",

  "signal_type": "New Market",

  "message": "Worldwide new-market-example.com reached 60,000 monthly visits, crossing the 50,000 threshold"

}


 

Traffic change signals

{

  "metric_change": 23.45,

  "direction": "grew",

  "period": "mom",

  "metric": "monthly_visits",

  "metric_value": 1250000,

  "country": "Worldwide",

  "event_id": "a7b8c9d0-e1f2-3456-789a-bcdef0123456",

  "site": "example.com",

  "event_date": 1753451427,

  "signal_id": "6d781126-1f02-40e3-bfc0-1f5eedf5b182",

  "signal_type": "Traffic - Change",

  "message": "Worldwide example.com monthly visits grew over the last month by 23.45%+"

}

Technology renewal signals

{

  "technologies": [

    "Amazon Web Services (AWS)"

  ],

  "period": "sixMonths",

  "renewal_date": "2025-12-31",

  "event_id": "a7b8c9d0-e1f2-3456-789a-bcdef0123456",

  "site": "technologies-renewal-example.com",

  "event_date": 1753451427,

  "signal_id": "6d781126-1f02-40e3-bfc0-1f5eedf5b182",

  "signal_type": "Technology - Renewal",

  "message": "technologies-renewal-example.com has a potential renewal with with Amazon Web Services (AWS) 2025-12-31"

}


 

Technologies signals

{

  "technologies": [

    "AWS Lambda",

    "React JS"

  ],

  "period": "month",

  "action": "added",

  "event_id": "a7b8c9d0-e1f2-3456-789a-bcdef0123456",

  "site": "technologies-example.com",

  "event_date": 1753451427,

  "signal_id": "6d781126-1f02-40e3-bfc0-1f5eedf5b182",

  "signal_type": "Technology",

  "message": "technologies-example.com installed AWS Lambda and React JS"
}

 

FAQs

What is the Sales Signals API?
The Sales Signals API lets you receive real-time sales signals for companies/domains you care about. It is API-first, and available via platform UI for management. Available to paid Sales Intelligence packages and DaaS standalone customers.

Can I use the API without the platform UI?
Yes. Every feature is accessible by API. The UI makes management easier for non-developers but is not required.

Are API-configured signals separate from platform signals?
Yes. API signals are managed separately from platform signals.

Are there prebuilt connectors for Salesforce, HubSpot, or Slack?
No. Integration is done via workflow automation, middleware (e.g., Zapier), or direct code/HTTP calls.

How is Signals API pricing determined?
Pricing is based on two factors: (1) Which package you select—Basic or +Intent (intent is a premium tier); (2) How many domains you monitor (tiered pricing: higher volume, lower unit price).

Can you give an example of the cost structure?
Yes. Example: 10,000 domains—Basic is $1.15/domain/year, +Intent is $1.30/domain/year. 100,000 domains—Basic is $0.90/domain, +Intent is $1.00/domain. Total = price × domain count.

What’s the rationale for this model?
Modularity (pay for what you need), volume incentives (lower unit cost at scale), and upsell to intent signals for higher value.

What are the key API endpoints?
Endpoints include: /describe (see allowed parameters); /signals/* (create/manage signals); /domains/subscribe, /domains/unsubscribe; /webhook-subscriptions/*; /events/history; /events/resend.

What is the /describe endpoint and why is it important?
This is your source of truth for supported values (metrics, countries, topics, etc). The API will reject unsupported values. Always check /describe before configuring.

Do POST endpoints require a strict schema?
Yes. The API enforces strict JSON schemas per endpoint. Refer to documentation or use /describe for valid parameters.

What’s the recommended batch size for webhooks?
For integrations like Slack and Zapier, always use batch size = 1. They do not support batches.

Can I subscribe/unsubscribe multiple domains at once?
Yes, provide an array of domain strings. In CRMs, you will typically create automation (for example, using workflow rules, Flows, or code) on your side to detect relevant events—like when a new account is created, or its status changes—and then call the Signals API for each domain (website) you want to subscribe or unsubscribe. This means your CRM is responsible for detecting these changes and triggering the API call for each domain automatically.

How do I connect the API to Salesforce?
Use Salesforce Flows (no code) or Apex (code) to automate domain subscriptions. Use Named Credential for secure API calls. To receive signals, expose a Salesforce Site and Apex REST endpoint; update CRM fields on incoming signals. No plug-and-play connector—setup requires admin/dev.

How do I automate domain subscription/unsubscription in Salesforce?
Trigger on Account/Lead status changes in Flow or Apex (e.g., Customer = subscribe, Lost/Closed = unsubscribe). POST the website to the relevant endpoint. See [Salesforce Integration Appendix] for detailed steps.

How do I receive signals in Salesforce?
Create a Salesforce Site and RESTful Apex class to receive webhook events. Parse and update relevant Account/Lead fields on signal arrival.

How do I connect the API to HubSpot?
Use HubSpot workflows with a custom code action (Node.js/axios) to POST domains for subscription. Use Zapier to catch webhooks and update Companies with new signals (batch size = 1).

How do I receive signals in HubSpot?
Use Zapier Webhooks to catch API events, then find and update the matching Company record in HubSpot. SignalsPerHook must be 1.

How do I automate unsubscribing domains in HubSpot?
Trigger a workflow on Company status changes, use custom code or API call to /domains/unsubscribe. See [HubSpot Integration Appendix] for step-by-step details.

How do I connect the API to Slack?
Use Slack Workflow Builder → New Workflow → From a webhook. Paste the webhook URL into Similarweb’s webhook configuration. Slack must receive one event per call (batch size = 1). Configure Slack to post messages where needed.

Can I test webhooks before full setup?
Yes. Add/test webhook URLs in the UI or API before subscribing domains or creating signals. Send a test message for validation.

What happens if I enter unsupported parameters or values?
The API will reject them with a clear error. Always query /describe first.

What if my Flow, code, or webhook fails?
Use built-in error handling: notify admins, log failures, and regularly review logs. Check API call limits and system status.

How do I monitor for failures and retry events?
Use /events/history to audit delivery and /events/resend to replay failed or missed events.

What if I reach my domain or webhook limit?
The UI will prompt to upgrade if eligible; otherwise, further additions are blocked until you increase your package.

What are your top recommendations for using the Signals API?

  • Always query /describe before configuring signals.
  • Automate CRM and workflow sync for subscription/unsubscription.
  • Monitor event history for delivery and failures.
  • Use batch size = 1 for Slack/Zapier; larger batches where supported.
  • Lock down webhook endpoints for security.
  • Document automations for future admins and auditing.


 

Was this article helpful?
0 out of 1 found this helpful

Can’t find what you're looking for?

We'll help you find the answer or connect you to a consultant.

Contact us