Detection stuck in a dashboard dies. The competitor’s promo that shows up in the team channel at 9:07 am, or on a pricing dashboard right next to your margin, decides something. That is the difference a competitor data API makes: pulling competitive intelligence out of the tab nobody opens on a busy day and dropping it into the workflow where the team already works, the BI, Slack, the warehouse.
This guide shows what the Batedor public API exposes, how outbound webhooks and the ready-made Slack, Telegram and WhatsApp channels work, and three practical setups: a pricing dashboard in Metabase, an alert in the team channel and the overlay of a rival’s promo on your own sales curve. The audience is the store owner who has one analyst (in-house or from an agency) able to make an HTTP call. You don’t need more than that.
Why data trapped in a dashboard dies
A dashboard is great for investigating and terrible for interrupting. When you want to understand a competitor’s coupon history, the timeline does the job. But Tuesday morning’s pricing decision doesn’t happen inside a monitoring tool: it happens in a margin spreadsheet, in a BI dashboard, in a Slack or WhatsApp conversation. If the competitive data isn’t in those places, it arrives late or it doesn’t arrive at all.
There is also a composition problem. The competitor signal alone says little: “the rival launched a 20% coupon” only becomes a decision when set against your own number, your margin on that SKU, your daily sales, your CAC. Nobody does that cross-reference in their head; it lives in the BI. We have already written about how to turn competitor data into commercial decisions; the integration is the plumbing that makes this routine automatic instead of heroic.
What a competitor data API delivers (and what it doesn’t)
The key is created in Account > Integrations, in the “API keys” section. It has the format bdr_ followed by a prefix and a secret, appears only once at creation (after that it is unrecoverable: lose it, revoke and create another) and goes in the Authorization: Bearer header of every call. You can create one key per system, with a label and optional expiry, and the page shows when and from which IP each key was last used. Revocation takes effect immediately.
| Endpoint | What it returns | Useful filters |
|---|---|---|
| /public/v1/competitors | List of monitored competitors | text search, tag and group, pagination |
| /public/v1/competitors/:id | Details of one competitor | none |
| /public/v1/campaigns | Detections classified by the AI (promo, coupon, free shipping, launch…) | competitorId, isActive, startDate, endDate, pagination |
| /public/v1/campaigns/:id | Details of one detection | none |
Fonte: Real Batedor routes, authenticated with Authorization: Bearer bdr_…
An honest caveat: v1 is read-only and covers competitors and detections. It doesn’t expose the full historical series of social media metrics or any write endpoints, and obviously it doesn’t have your sales curve, that comes from your ERP or your platform. The API delivers the competitive half of the cross-reference; your half, you are the one who brings it into the BI.
Outbound webhooks: the event comes to you
Polling the API every hour works for a dashboard, but it is slow for an alert. That is what outbound webhooks are for, registered on the same Integrations page: you provide a URL of yours (or a Zapier/Make webhook) and choose which events you want to receive. There are six: campaign.detected (new classified detection), movement.detected (strategic move the AI considered relevant when comparing competitor snapshots), crawl.completed, crawl.failed, report.completed and notification.
Each delivery is a JSON POST with the event, the data, a delivery id and the attempt number. The body is signed with HMAC-SHA256 using the secret generated at registration, and the signature goes in the X-Batedor-Signature header: your endpoint recalculates the HMAC and compares before trusting the content. If the delivery fails or takes more than 8 seconds, Batedor retries, up to 3 attempts with a growing interval, and logs each attempt in a log the page itself shows (last HTTP status and last error).
Three uses that pay for the setup
1. A pricing dashboard in Metabase
A scheduled job (an hourly cron does the job) calls /public/v1/campaigns with startDate set to today and writes the detections to a table in your database. In Metabase, you plot campaign frequency and discount depth per competitor, week by week, next to your margin per category. It is the materialization of the competitive intelligence KPIs in a place the sales team looks at every day, without depending on someone remembering to open the panel.
2. An alert in the channel the team already uses
Here there are two paths, and the shorter one requires no code at all. In Account > Notifications, Batedor has ready-made channels: Slack (via Incoming Webhook), Telegram (via a bot), WhatsApp, plus email, Discord and a generic webhook, complete with an automatic summary of the last 24 hours. The availability of Slack, Telegram and WhatsApp varies by plan (see the plans). The second path is the outbound webhook pointing to your backend, which formats the message your way: only coupon detections above X%, only the competitors in the “direct” group, with the post link and your margin on that SKU in the same message.
3. A rival’s promo over your own sales curve
This is the cross-reference that changes decisions the most. Every campaign.detected has a timestamp; in the BI, mark these events over your daily revenue. Example: a supplement store sees the rival drop a 20% coupon in the week of Brazilian Father’s Day. Without data, the reflex is to match the coupon and burn margin. With two or three cycles recorded in the BI, you answer the question that matters: when this competitor runs a promo, does my sales really drop? If it doesn’t, the right answer is not to react, and that is worth money. If it does, you react with a number, not with a scare.
How to build it in one afternoon
From zero to the first alert
Step 1
Create the key in Account > Integrations
One label per system (“metabase”, “n8n”). Copy the key right away: it won’t appear again.
Step 2
Make the first query
GET /public/v1/campaigns with startDate set to this week, header Authorization: Bearer bdr_… Validate the JSON before automating.
Step 3
Register the outbound webhook
Your endpoint URL or a Zapier/Make one, events campaign.detected and movement.detected, keep the secret.
Step 4
Validate the signature and plug into the destination
Recalculate the body’s HMAC, compare it with X-Batedor-Signature and only then write to the BI or post to the channel.
If you aren’t monitoring anyone yet, you can start with the 14-day trial, no card: register two or three competitors, let the first detections come in and only then spend the analyst’s afternoon plugging in BI and channel. Plumbing with no water tests nothing.
See your first competitor in minutes
14-day free trial, no card. Within minutes, the first detection shows up on your dashboard.
Create free account