# Northpeak NeedShift Intelligence (`northpeak_data/northpeak-needshift-intelligence`) Actor

Detect B2B need transitions from public evidence with temporal state, supporting and counter-evidence, confidence, likely buyer and decision-ready actions.

- **URL**: https://apify.com/northpeak\_data/northpeak-needshift-intelligence.md
- **Developed by:** [Northpeak Data](https://apify.com/northpeak_data) (community)
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.90 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Northpeak NeedShift Intelligence

### Know when a company's buying window opens — and why

Northpeak NeedShift Intelligence monitors public company evidence and detects emerging B2B needs before they become obvious. It now goes beyond intent scoring by maintaining a **Buying Window** over time: when the opportunity opens, strengthens, cools, or closes.

Track signals across hiring, security, AI/data, sales expansion, customer support, operations and procurement — then get the likely need, confidence, buying-window state, role-level buying committee, evidence gaps and recommended next action.

**Built for:** B2B sales teams, lead-intelligence workflows, prospecting systems, agencies and sales automation.

**Instead of:** "Company X has an intent score."

**You get:** "Company X's Security / Identity buying window just opened. Confidence 83. New evidence explains why, the likely buying roles are identified, and the engine tells you what still needs confirmation before outreach."

### Buying Window Intelligence

NeedShift turns repeated evidence checks into an explicit opportunity lifecycle:

- `OPENED` — evidence crossed the configured confidence threshold.
- `STRENGTHENING` — the need remains qualified and meaningful new evidence or confidence growth appeared.
- `OPEN` — the need remains qualified without a major directional change.
- `COOLING` — the need remains visible but evidence is weakening.
- `CLOSED` — a previously open buying window fell below the confidence threshold.
- `BASELINE` / `NOT_OPEN` — there is not yet a qualified buying window.

Every result can include `buyingWindowDrivers`, `previousBuyingWindowState`, `confirmationNeeded`, and `nextCheckDays`. This makes the output useful for deciding not only *what* a company may need, but *when* an account deserves action and what evidence is still missing.

#### Buying committee without invented people

For a qualified need, `buyingCommittee` provides role-level hypotheses for the economic buyer, champion, technical evaluator and procurement role. These are explicitly marked `ROLE_HYPOTHESIS`; NeedShift does not invent named contacts when direct public evidence is absent.

### What it does

For each company, the Actor fetches user-supplied public URLs such as careers, security/compliance, product, newsroom, operations, procurement, or technology pages. It creates a repeatable evidence snapshot, classifies likely need domains, checks counter-evidence, compares the current evidence with the previous run, and returns decision-ready intelligence.

The engine tracks both evidence hashes and detected signals. Repeated runs can therefore distinguish newly observed signals from evidence already known to the monitor.\n\n### Multi-source causal evidence\n\nNeedShift also classifies public evidence into strategic event classes: **Hiring, Funding, Executive Change, Tech/Vendor Change, Expansion, and Contraction**. These events are not treated as standalone intent scores. They are connected to the detected need and Buying Window through an `evidenceGraph`, with supporting or counter direction, temporal novelty, and source traceability.\n\n`predictiveSignals` highlights newly changed strategic events, while `anomalyScore` measures how unusual the current evidence change is relative to the persisted baseline. This lets downstream workflows distinguish routine evidence from a meaningful shift without paid enrichment, browser automation, or an external LLM.

### Core output

Each company analysis can include:

- `detectedNeed` and `transitionStatus`.
- `buyingWindowState`, `previousBuyingWindowState`, and `buyingWindowOpened`.
- `buyingWindowDrivers` — the new signals and changed sources driving the window.
- `buyingCommittee` — role-level economic buyer, champion, technical evaluator and procurement hypotheses.
- `confirmationNeeded` — evidence gaps and cautions to verify before action.
- `nextCheckDays` — suggested monitoring interval based on window state.
- `confidence`, `previousConfidence`, and `confidenceDelta`.
- `newSignals` and `temporalEvidence` — what is new or changed relative to persisted state.
- `supportingEvidence` and `counterEvidence` with source URLs and evidence hashes.
- `alternativeHypotheses`, `likelyBuyer`, `urgency`, `causalChain`, and `recommendedAction`.
- `evidenceGraph` — causal links from strategic events to the detected need, including support/counter direction.\n- `predictiveSignals` — newly changed Hiring, Funding, Executive, Tech/Vendor, Expansion, or Contraction evidence.\n- `anomalyScore` — a 0–100 measure of how much fresh evidence changed in the current run.\n- `eventSignals` — normalized strategic event classes detected from the supplied public sources.\n- `evidenceSources` — fetch status, HTTP status, hashes, and latency for traceability.

### Example input

```json
{
  "companies": [
    {
      "name": "Example company",
      "domain": "example.com",
      "evidenceUrls": [
        "https://example.com/careers",
        "https://example.com/security"
      ]
    }
  ],
  "monitorId": "weekly-b2b-watch",
  "outputMode": "all",
  "minConfidence": 45,
  "maxEvidenceUrlsPerCompany": 8
}
```

Use a stable `monitorId` for repeated runs. State is persisted per monitor and company. Changing the monitor ID intentionally creates a fresh baseline.

### Recommended workflow

Supply 2–8 stable public URLs per company and run the same monitor on a schedule. The first run establishes state; later runs compare current signals and page hashes with stored evidence. `nextCheckDays` suggests a tighter cadence for newly opened or strengthening windows and a slower cadence when no window is open.

Use `outputMode: "all"` when you want every analyzed company returned. `transitions_only` returns qualifying needs and also preserves `COOLING` or `CLOSED` windows so downstream systems can react when an opportunity deteriorates.

### Interpreting results

A high confidence score means the supplied evidence strongly matches one of the supported need domains. It is not proof that a purchase will occur. Verify important evidence before sales outreach or operational decisions. `counterEvidence`, `confirmationNeeded`, `alternativeHypotheses`, `newSignals`, and source hashes make that verification easier.

A `null` `detectedNeed` is a valid result: the supplied evidence did not clear the requested confidence threshold.

### Supported need domains

The deterministic engine covers Security / Identity infrastructure, Data / AI infrastructure, Sales / GTM expansion, Customer support infrastructure, Logistics / Operations expansion, and Finance / Procurement infrastructure.

### Reliability and limits

The Actor is HTTP-first and does not require browser automation, residential proxies, paid enrichment APIs, LinkedIn cookies, or an external LLM API. Public pages can still block automated requests, change markup, disappear, or contain ambiguous language. Failed evidence URLs are reported in `evidenceSources` rather than silently treated as positive evidence.

The Actor accepts up to 100 companies per run and up to 20 evidence URLs per company; the configurable default is 8 URLs per company.

### Pricing

NeedShift uses pay-per-result pricing. The current Store price is **$4.90 per 1,000 results**, plus the Store-displayed infrequent Actor-start event where applicable. Platform usage is included for the user under the current Store pricing configuration.

# Actor input Schema

## `companies` (type: `array`):

Companies to analyze. Add public evidence URLs such as careers, news, security/compliance, product or technology pages.

## `monitorId` (type: `string`):

Stable identifier used to preserve temporal state across runs.

## `outputMode` (type: `string`):

Return all company analyses or only detected transitions.

## `minConfidence` (type: `integer`):

Minimum confidence score required for a transition.

## `maxEvidenceUrlsPerCompany` (type: `integer`):

Maximum number of evidence URLs fetched for each company.

## Actor input object example

```json
{
  "monitorId": "default",
  "outputMode": "all",
  "minConfidence": 45,
  "maxEvidenceUrlsPerCompany": 8
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("northpeak_data/northpeak-needshift-intelligence").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("northpeak_data/northpeak-needshift-intelligence").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call northpeak_data/northpeak-needshift-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,northpeak_data/northpeak-needshift-intelligence"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/JlqTXuBTgNW7ZJexn/builds/6BLzI1ASZGwDBOtdE/openapi.json
