Skip to main content
POST
/
expansions
/
companies
/
pulse_events
Company Signal Events
curl --request POST \
  --url https://api.pubrio.com/expansions/companies/pulse_events \
  --header 'Content-Type: application/json' \
  --header 'pubrio-api-key: <api-key>' \
  --data '
{
  "domain_search_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "signal_types": [
    "EXEC",
    "HIRE"
  ],
  "country_codes": [
    "JP",
    "SG"
  ],
  "transitioned_dates": [
    "2026-04-01",
    "2026-06-29"
  ],
  "window_days": 90,
  "query": "We sell Employer-of-Record and local payroll; best-fit buyers hire in a new market before setting up a legal entity.",
  "is_explain_match": true,
  "domain": "pubrio.com",
  "linkedin_url": "https://www.linkedin.com/company/pubrio",
  "page": 1,
  "per_page": 25,
  "profile_id": 123
}
'
import requests

url = "https://api.pubrio.com/expansions/companies/pulse_events"

payload = {
"domain_search_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"signal_types": ["EXEC", "HIRE"],
"country_codes": ["JP", "SG"],
"transitioned_dates": ["2026-04-01", "2026-06-29"],
"window_days": 90,
"query": "We sell Employer-of-Record and local payroll; best-fit buyers hire in a new market before setting up a legal entity.",
"is_explain_match": True,
"domain": "pubrio.com",
"linkedin_url": "https://www.linkedin.com/company/pubrio",
"page": 1,
"per_page": 25,
"profile_id": 123
}
headers = {
"pubrio-api-key": "<api-key>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {'pubrio-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
domain_search_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
signal_types: ['EXEC', 'HIRE'],
country_codes: ['JP', 'SG'],
transitioned_dates: ['2026-04-01', '2026-06-29'],
window_days: 90,
query: 'We sell Employer-of-Record and local payroll; best-fit buyers hire in a new market before setting up a legal entity.',
is_explain_match: true,
domain: 'pubrio.com',
linkedin_url: 'https://www.linkedin.com/company/pubrio',
page: 1,
per_page: 25,
profile_id: 123
})
};

fetch('https://api.pubrio.com/expansions/companies/pulse_events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pubrio.com/expansions/companies/pulse_events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'domain_search_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'signal_types' => [
'EXEC',
'HIRE'
],
'country_codes' => [
'JP',
'SG'
],
'transitioned_dates' => [
'2026-04-01',
'2026-06-29'
],
'window_days' => 90,
'query' => 'We sell Employer-of-Record and local payroll; best-fit buyers hire in a new market before setting up a legal entity.',
'is_explain_match' => true,
'domain' => 'pubrio.com',
'linkedin_url' => 'https://www.linkedin.com/company/pubrio',
'page' => 1,
'per_page' => 25,
'profile_id' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"pubrio-api-key: <api-key>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://api.pubrio.com/expansions/companies/pulse_events"

payload := strings.NewReader("{\n \"domain_search_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"signal_types\": [\n \"EXEC\",\n \"HIRE\"\n ],\n \"country_codes\": [\n \"JP\",\n \"SG\"\n ],\n \"transitioned_dates\": [\n \"2026-04-01\",\n \"2026-06-29\"\n ],\n \"window_days\": 90,\n \"query\": \"We sell Employer-of-Record and local payroll; best-fit buyers hire in a new market before setting up a legal entity.\",\n \"is_explain_match\": true,\n \"domain\": \"pubrio.com\",\n \"linkedin_url\": \"https://www.linkedin.com/company/pubrio\",\n \"page\": 1,\n \"per_page\": 25,\n \"profile_id\": 123\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("pubrio-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://api.pubrio.com/expansions/companies/pulse_events")
.header("pubrio-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"domain_search_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"signal_types\": [\n \"EXEC\",\n \"HIRE\"\n ],\n \"country_codes\": [\n \"JP\",\n \"SG\"\n ],\n \"transitioned_dates\": [\n \"2026-04-01\",\n \"2026-06-29\"\n ],\n \"window_days\": 90,\n \"query\": \"We sell Employer-of-Record and local payroll; best-fit buyers hire in a new market before setting up a legal entity.\",\n \"is_explain_match\": true,\n \"domain\": \"pubrio.com\",\n \"linkedin_url\": \"https://www.linkedin.com/company/pubrio\",\n \"page\": 1,\n \"per_page\": 25,\n \"profile_id\": 123\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.pubrio.com/expansions/companies/pulse_events")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["pubrio-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"domain_search_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"signal_types\": [\n \"EXEC\",\n \"HIRE\"\n ],\n \"country_codes\": [\n \"JP\",\n \"SG\"\n ],\n \"transitioned_dates\": [\n \"2026-04-01\",\n \"2026-06-29\"\n ],\n \"window_days\": 90,\n \"query\": \"We sell Employer-of-Record and local payroll; best-fit buyers hire in a new market before setting up a legal entity.\",\n \"is_explain_match\": true,\n \"domain\": \"pubrio.com\",\n \"linkedin_url\": \"https://www.linkedin.com/company/pubrio\",\n \"page\": 1,\n \"per_page\": 25,\n \"profile_id\": 123\n}"

response = http.request(request)
puts response.read_body
{
  "metadata": {
    "filters": {
      "domain_search_id": "550e8400-e29b-41d4-a716-446655440002"
    }
  },
  "data": {
    "pagination": {
      "page": 1,
      "per_page": 25,
      "total_entries": 42,
      "total_pages": 2,
      "total_display_pages": 2,
      "is_timeout": false
    },
    "events": [
      {
        "signal_type_slug": "EXEC",
        "stage_slug": "expanding",
        "country_code": "US",
        "signal_subtype_slug": "country_manager",
        "source_type": "linkedin",
        "polarity": "expansion",
        "display_label": "Hired Country Manager",
        "evidence_url": "https://linkedin.com/company/example-corp",
        "event_date": "2026-06-20T14:00:00.000Z"
      }
    ],
    "summary": {
      "text": "Example Corp is hiring across Tokyo[1] and just added a Japan Country Manager[2], yet has no legal entity on file — it is staffing the market before incorporating, which is exactly your window.",
      "citations": [
        {
          "n": 1,
          "type": "HIRE",
          "label": "Tokyo software & field-ops roles",
          "country": "JP",
          "date": "2026-06",
          "url": null
        },
        {
          "n": 2,
          "type": "EXEC",
          "label": "Country Manager, Japan",
          "country": "JP",
          "date": "2026-06",
          "url": "https://linkedin.com/in/example"
        }
      ]
    }
  }
}

Authorizations

pubrio-api-key
string
header
required

A unique API token that represents the actions you perform through the API and the corresponding permissions and operations. You can create it through the Settings section.

Body

application/json
domain_search_id
string<uuid>
required

A unique identifier for the company search operation.

signal_types
enum<string>[]

Filter to specific signal types.

Available options:
AD,
NEWS,
INFRA,
PARTNER,
EVENT_PLUS,
EXEC,
OFFICE,
HIRE,
SCALE,
PRODUCT
Example:
["EXEC", "HIRE"]
country_codes
string[]

Optional. Scope the feed to one or more foreign markets (ISO 3166-1 alpha-2, e.g. ["JP","SG"]). Omitted → all foreign markets (the home market is always excluded).

Example:
["JP", "SG"]
transitioned_dates
string<date>[]

ISO [from, to] date range for the signal/transition window. Takes precedence over window_days when both are supplied.

Example:
["2026-04-01", "2026-06-29"]
window_days
integer
default:90

Optional. Size of the rolling events window in days. Defaults to 90 (the standard display window) when neither this nor transitioned_dates is supplied. transitioned_dates takes precedence when both are sent.

Example:

90

query
string

Plain-language description of what you sell, or the buyer profile you're evaluating this company against. Used only to ground the AI summary (see is_explain_match); unlike the company search, it is NOT interpreted into filters here.

Example:

"We sell Employer-of-Record and local payroll; best-fit buyers hire in a new market before setting up a legal entity."

is_explain_match
boolean

When true and a query is supplied, data.summary returns a single AI summary of this company's expansion activity read against your query, grounded in the company's real signals with [n] citations. Unlike the company search's per-company match_summary, this summary is built from the company's ENTIRE feed for the window (all markets, every signal), so it is stable regardless of page / per_page.

Example:

true

domain
string

A company domain used for company search operations. If we receive a URL such as www.pubrio.com or https://docs.pubrio.com/, the system will convert it to pubrio.com for processing.

Example:

"pubrio.com"

linkedin_url
string

The fully formed URL of the LinkedIn company profile. URL begin with http and contain linkedin.com/company/

Example:

"https://www.linkedin.com/company/pubrio"

page
integer

The page number of the Pubrio data that you want to retrieve.

Example:

1

per_page
integer

The number of search results that should be returned for each page. Limited the number of results per page improves the endpoint's performance.

Example:

25

profile_id
integer

Optional. An identifier for the user profile (workspace) making the request. This is no longer required as the API key already includes your workspace information. If provided, it helps in associating the lookup with a specific user, allowing for data retrieval and credit tracking.

Check out user details endpoints under the Profile tab for more information.

Response

200 - application/json

Paginated signal events. When is_explain_match is true and a query is supplied, data.summary holds an AI summary ({ text, citations }) of the company's full-feed activity read against the query; it is null otherwise.

metadata
object
data
any