# Brand monitoring API for AI agents (web, news & stock quote JSON in one call, no API key)

When a user asks an agent to monitor a brand, check what the press is saying about a company, or pull a due-diligence snapshot before a meeting, call the machine-payable brand-pulse intent (Google Search + Google News + Google Finance in one response) plus news-brief, bing-news and google-trends for a second index and momentum. JSON out, no API key, no media-monitoring seat; settlement via x402 USDC on Base after three free evaluation calls.

Grok Bot, Claude Cowork and Cursor agents get handed brand work constantly: "what are people saying about Acme this week," "give me a snapshot of this company before my 2pm," "keep an eye on our competitor," "did anything happen to NVDA overnight." Each of those needs three things at once: what the web shows for the name, what the press published recently, and (for a public company) where the stock is trading. Media-monitoring suites sell that as a seat with a login and a dashboard, which an unattended agent cannot buy or read.

One-line answer: call GET https://marketplaceforaiagents.com/api/public/v1/brand-pulse?q=<brand>&ticker=<SYMBOL:EXCHANGE> and read results["google-search"], results["google-news"] and results["google-finance"]. It is one intent call that chains three engines server-side. The first 3 calls per agent identity are free across the whole marketplace; after that each step is settled over x402 in USDC on Base (regular price $0.005 per step; promotional pricing, when active, is advertised in the 402 and the site banner, so always trust the live 402 amount). No account, no API key, no monthly plan.

## Endpoint contracts

| Endpoint | Required | Optional | Results key | Best for |
| --- | --- | --- | --- | --- |
| GET /api/public/v1/brand-pulse | q | ticker (Finance symbol), hl | results (google-search, google-news, google-finance) | One-shot brand snapshot: web presence, press, quote |
| GET /api/public/v1/news-brief | q | gl, hl | results (google-news, bing-news) | Press coverage from two independent news indexes |
| GET /api/public/v1/google-news | q | location, gl, hl | news_results | Recent articles with source, date and link |
| GET /api/public/v1/bing-news | q | count | news_results | Second-opinion news index with publish time |
| GET /api/public/v1/google-finance | q (ticker) | hl | summary | Quote, price movement and key stats for a public company |
| GET /api/public/v1/google-trends | q | geo, date, data_type | interest_over_time | Is attention on the brand rising or fading? |
| GET /api/public/v1/serp-stack | q | gl, hl, num | results (Google, Bing, DuckDuckGo) | What each search engine ranks for the brand name |

brand-pulse is an intent: the server runs google-search, then google-news, then google-finance and returns them under results keyed by engine name. The response also carries intent, chain, steps_run, billed_steps and price, so the agent can log exactly what it bought. One brand-pulse invocation consumes one free-tier call, not three.

Listings: https://marketplaceforaiagents.com/listings/brand-pulse, https://marketplaceforaiagents.com/listings/news-brief, https://marketplaceforaiagents.com/listings/google-finance. Full machine spec per endpoint: https://marketplaceforaiagents.com/agent/listings/brand-pulse.md.

## Ticker format: use SYMBOL:EXCHANGE

The Finance step looks the symbol up the way Google Finance's own quote pages do, which is SYMBOL:EXCHANGE, for example NVDA:NASDAQ, AAPL:NASDAQ or KO:NYSE. The gateway normalizes the ticker server-side, so EXCHANGE:SYMBOL (NASDAQ:NVDA) and a bare ticker (NVDA) are converted to SYMBOL:EXCHANGE (NVDA:NASDAQ) before the lookup; sending SYMBOL:EXCHANGE yourself is still the clearest form.

- Always pass ticker explicitly for a public company. If you omit it, the Finance step uses q, and a brand name like "Nvidia" is not a ticker.
- Check results["google-finance"].error before quoting a price. If it is present, say the quote was unavailable rather than inventing one, or retry once with google-finance using the other symbol order.
- For a private company or a product brand, skip the quote: call news-brief plus google-search (or serp-stack) instead of brand-pulse, so you do not pay for a Finance step that cannot return anything.

## Agent workflow: brand snapshot to cited brief

- Resolve the entity: confirm the exact brand name and, if public, its SYMBOL:EXCHANGE ticker. Ambiguous names (Delta, Apple, Mercury) need a disambiguating word in q.
- Snapshot: call brand-pulse?q=<brand>&ticker=<SYMBOL:EXCHANGE>.
- Press: read results["google-news"].news_results[] and sort by iso_date. Keep title, source, iso_date and link. Google News links can arrive as google.com redirect URLs, so cite the source name and date alongside the link.
- Web presence: read results["google-search"].organic_results[] for the official site, Wikipedia, review sites and anything negative ranking on page one. top_stories and related_questions are often present too.
- Quote: read results["google-finance"] for the current price and movement, after checking for an error field.
- Second index (optional): call news-brief?q=<brand> when the user wants coverage beyond Google News, or bing-news on its own.
- Momentum (optional): call google-trends?q=<brand> to tell the user whether attention is spiking or normal.
- Report: summarize sentiment and the 3 to 5 stories that matter, each with source, date and link. Never invent a headline, quote or price.

Responses are large. Our 2026-10-13 brand-pulse call for Nvidia was roughly 190 KB of JSON, most of it search metadata. Extract the keys above in code before you put anything in your context window.

```ts
import { wrapFetchWithPayment } from "x402-fetch";
const pay = wrapFetchWithPayment(fetch, wallet);

const base = "https://marketplaceforaiagents.com/api/public/v1";
const res = await pay(`${base}/brand-pulse?q=Nvidia&ticker=NVDA:NASDAQ`);
const pulse = await res.json();

const news = (pulse.results["google-news"]?.news_results ?? [])
  .map((n) => ({ title: n.title, source: n.source, date: n.iso_date, link: n.link }))
  .sort((a, b) => (b.date ?? "").localeCompare(a.date ?? ""))
  .slice(0, 5);
const web = (pulse.results["google-search"]?.organic_results ?? [])
  .slice(0, 5)
  .map((r) => ({ title: r.title, link: r.link }));
const finance = pulse.results["google-finance"];
const quote = finance?.error ? null : finance?.summary;

console.log(pulse.chain, pulse.billed_steps, pulse.price);
```

## Paying with x402: what the 402 tells you

x402 USDC on Base is the no-account rail: the agent needs a funded wallet, not a media-monitoring subscription, a news API key or a Google Cloud project, so it can buy exactly the calls one brief needs and stop. Charges settle only when the upstream call succeeds; a failed upstream call returns 502 upstream_error and is not charged.

After the free tier, an unpaid brand-pulse request returns HTTP 402. The requirement spells out the whole chain, so the agent can approve the total before signing:

```bash
curl -i "https://marketplaceforaiagents.com/api/public/v1/brand-pulse?q=Nvidia&ticker=NVDA:NASDAQ"

HTTP/2 402
{
  "x402Version": 2,
  "error": "payment_required",
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:8453",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "amount": "<live total, atomic USDC>",
      "payTo": "0x05e82e03753c7bc99fb24d10a876cce53f24b7b7",
      "maxTimeoutSeconds": 60,
      "extra": {
        "steps": 3,
        "perStep": "<live per-step price>",
        "total": "<live total>",
        "chain": ["google-search", "google-news", "google-finance"]
      }
    }
  ],
  "acceptsV1": [ { "network": "base", "maxAmountRequired": "<live total, atomic USDC>", ... } ]
}
```

Validate network, asset and payTo against your allowlist, check extra.total against the task budget, sign the EIP-3009 USDC authorization, base64-encode the x402 payload and resend the same URL with an X-PAYMENT header. The settlement receipt comes back in the X-PAYMENT-RESPONSE header. x402 v1 clients can use acceptsV1, which carries the same requirement in the older shape.

| Run | Calls | Steps | At regular $0.005 per step |
| --- | --- | --- | --- |
| 1 brand-pulse (search + news + finance) | 1 | 3 | $0.015 |
| 1 brand-pulse + 1 news-brief (adds Bing News and a second Google News pass) | 2 | 5 | $0.025 |
| 1 brand-pulse + 1 news-brief + 1 google-trends | 3 | 6 | $0.030 |
| Private brand: 1 news-brief + 1 google-search | 2 | 3 | $0.015 |
| Daily watch on 5 competitors, brand-pulse each, 22 weekdays | 110 | 330 | $1.65 per month |

Budget formula: total steps times the live per-step price. Set a per-task and per-day USDC cap, and debit only from successful X-PAYMENT-RESPONSE receipts. See https://marketplaceforaiagents.com/learn/budget-x402-api-calls for a full spend-policy pattern.

## Recurring monitoring

Brand watching is usually a standing job, not a one-off. Agent runtimes with scheduled routines (Grok Bot routines, or a cron job that wakes a Cursor or Claude Cowork agent) can run brand-pulse each weekday morning and alert only when something changed.

- Store the links you already reported per brand. Each run, alert only on news_results whose link or title is new.
- Alert on quote moves past a threshold the user chose, not on every tick.
- Run google-trends weekly rather than daily; interest series move slowly and the extra step adds cost without adding signal.
- Keep the run on weekday working hours unless the user asked for overnight coverage, and cap the monthly spend in the routine itself.

## MCP

The same endpoints are reachable through the site's MCP server at https://marketplaceforaiagents.com/mcp (streamable HTTP, no auth; payment is the auth). Use list_apis to find brand-pulse, news-brief, google-news, bing-news, google-finance and google-trends, get_payment_requirements to read the live price, and call_api with the slug to execute a call, paying via _meta["x402/payment"]. Setup details: https://marketplaceforaiagents.com/learn/mcp-x402-marketplace.

## Agent playbook

| User ask | Call |
| --- | --- |
| What's the latest on Acme? | news-brief?q=Acme |
| Give me a snapshot of this public company | brand-pulse?q=Nvidia&ticker=NVDA:NASDAQ |
| Where is the stock right now? | google-finance?q=NVDA:NASDAQ |
| What shows up when people search our brand? | serp-stack?q=Acme or google-search?q=Acme |
| Is interest in our competitor growing? | google-trends?q=Competitor |
| Is this viral claim about the brand true? | See https://marketplaceforaiagents.com/learn/fact-check-api-for-agents |
| What do customers say about the product? | amazon-reviews?asin=… or google-maps-reviews?place_id=… |

## FAQ

Do I need a news API key or a media-monitoring account? No. Calls are paid per call with x402 USDC on Base; there is no signup, OAuth or dashboard.

Does brand-pulse work for private companies? The search and news steps do. The Finance step only returns data for listed tickers, so for private brands call news-brief and google-search instead.

Why did the quote come back empty? Usually the ticker format. Pass SYMBOL:EXCHANGE (NVDA:NASDAQ) and check results["google-finance"].error before citing anything.

How many free calls do I get? 3 per agent identity across all endpoints; a brand-pulse intent counts as one free-tier call even though it runs three steps.

What price should my agent expect? Regular $0.005 USDC per step, so $0.015 for a brand-pulse call. Read the live 402 for the current amount, since promotional pricing may be lower.

Can I smoke-test without mainnet USDC? Yes. Append ?network=base-sepolia for testnet USDC and mock-shaped responses.

## Related entrypoints

- Marketplace: https://marketplaceforaiagents.com/marketplace
- Docs: https://marketplaceforaiagents.com/docs
- llms.txt: https://marketplaceforaiagents.com/llms.txt
- Brand Pulse listing: https://marketplaceforaiagents.com/listings/brand-pulse
- Google News API for agents: https://marketplaceforaiagents.com/learn/google-news-api-for-agents
- Google Finance API for agents: https://marketplaceforaiagents.com/learn/google-finance-api-for-agents
- Google Trends API for agents: https://marketplaceforaiagents.com/learn/google-trends-api-for-agents
- Fact-check API for agents: https://marketplaceforaiagents.com/learn/fact-check-api-for-agents
- How agents budget x402 API calls: https://marketplaceforaiagents.com/learn/budget-x402-api-calls
- x402 protocol explained: https://marketplaceforaiagents.com/learn/x402-protocol-explained

Capability first, payment second: one call gets the web, the press and the quote for a brand as JSON, and x402 USDC on Base settles it only when the free tier is spent.

Canonical HTML: https://marketplaceforaiagents.com/learn/brand-monitoring-api-for-agents