Competitor Content Monitoring With a Posts API
By Kooperativa Engineering
Most competitor monitoring watches websites: a pricing page, a changelog, a blog. It tells you what a competitor decided to publish on its own domain. It says little about what the company is actually pushing to the market this week, and nothing about who is listening, and both of those show up first in the posts a company and its leaders publish.
This article builds a weekly digest from three sources: what each competitor posted, who engaged with it, and who they hired. Everything comes from one API and one key, and a run for five competitors costs about a cent.
What the digest contains
Four sections, each answering a question a sales or product lead asks on Monday morning.
| Section | Question | Endpoint |
|---|---|---|
| New posts | What are they pushing this week? | GET /v1/companies/posts |
| Leader posts | What are their senior people saying? | GET /v1/people/posts |
| Audience | Which companies and roles engage? | GET /v1/posts/reactions, GET /v1/companies/post-comments |
| People moves | Who did they hire and who left? | GET /v1/company/hiring-signals, GET /v1/company/past-employees |
How to monitor competitor social media posts automatically
For each competitor, read the first page of company posts, which covers a normal week for most companies, and keep the posts you have not stored yet. For each new post, read the first page of reactions. Then read hiring signals for the last seven days. The seen set can be a table or a file, and the post identifier in each item is the key.
const BASE = 'https://kooperativa.io/api/v1';
const headers = { Authorization: `Bearer ${process.env.KOOPERATIVA_API_KEY}` };
const competitors = [
{ username: 'competitor-one', companyId: 11111 },
{ username: 'competitor-two', companyId: 22222 },
];
async function get(path, params) {
const res = await fetch(`${BASE}${path}?${new URLSearchParams(params)}`, { headers });
return res.ok ? res.json() : null; // a failed call is not billed, retry next week
}
const digest = [];
for (const { username, companyId } of competitors) {
const posts = await get('/companies/posts', { username });
const hires = await get('/company/hiring-signals', { company_id: companyId, days: 7 });
const newPosts = (posts?.data ?? []).filter((p) => !seen.has(p.urn)); // seen: your stored set
for (const post of newPosts) {
post.reactions = await get('/posts/reactions', { urn: post.urn, page: 1 });
}
digest.push({ username, newPosts, hires });
}
// Hand the digest to a template, a Slack message or a model that writes the summarySee which companies engage with a competitor
The reactions on a competitor post show which companies pay attention to it. Enrich the people with GET /v1/person, group them by employer, and the result is a list of accounts that follow your competitor closely and that you may not know. Those are the accounts worth a look from your sales team, and the list refreshes every week without anyone opening a browser.
Add the people layer
Posts and people moves explain each other. A competitor that publishes about a new enterprise tier while it hires enterprise sellers is making a move, and either signal alone would be easy to miss. Hiring signals show who joined in the window, decision makers lists the senior people, and past employees lists the people who left and know the product from the inside. Because they sit in the same API as the posts, the digest does not need a second vendor.
What it costs
Each live call is $0.001. For five competitors with one page of posts each, plus ten reaction calls for the new posts, a weekly run is 15 calls, which is $0.015, or about 78 cents a year. Hiring signals and enrichment are standard endpoints and are covered by the license.
Where it fits next to website monitoring
A website monitor watches the competitor's own domain: pricing pages, changelogs, documentation. This digest covers the social side: posts, replies and the people involved. Use both. Run the digest on a schedule, because it reads at the time you call and does not push, and keep your job tolerant of an occasional failed call while the endpoints are in Beta.
The people who engage with a post are third parties. Use the list to understand which kinds of companies follow a competitor, and write to individuals only when you have something relevant to say.
Frequently asked questions
How do I monitor competitor social media posts automatically?
Schedule a script that calls GET /v1/companies/posts for each competitor, keeps the posts it has not stored yet and reads the reactions on the new ones. A weekly run for five competitors costs about $0.015.
How do I monitor what competitors post?
Run a weekly job that reads GET /v1/companies/posts for each competitor, compares the posts with a stored set and keeps the new ones. Add GET /v1/posts/reactions to see who engaged.
How often should I run it?
Weekly works for most markets and costs cents. Run it daily during a competitor launch or when a competitor posts often.
Can I see which companies follow a competitor?
Yes. Read the reactions and comments on its posts, enrich each person with GET /v1/person and group them by employer.
How much does the digest cost?
Five competitors with one page of posts and ten reaction calls is 15 live calls, which is $0.015 a week. Hiring signals and enrichment are covered by the license.
Get started
Try Kooperativa
One API key. Person and company enrichment, structured search, and monitors under one flat license.