CrawlForge MCP
HomePlaygroundUse CasesIntegrationsPricingDocumentationBlog
Competitor Monitoring API for Consultants: One Per Client
Use Cases
Back to Blog
Use Cases

Competitor Monitoring API for Consultants: One Per Client

C
CrawlForge Team
Engineering Team
September 11, 2026
5 min read

On this page

Quick Answer

A competitor monitoring API for consultants has to survive the shape of consulting work: several clients at once, engagements that stop and restart, and a cost you can defend on an invoice. CrawlForge's hosted monitors give one account up to 50 monitors of 20 URLs each, so a monitor per client is the natural unit — name it after the client and every check writes a request-log row carrying that name and the credits it charged. You can create one either way: a REST POST puts all twenty of a client's URLs in a single monitor, while the MCP server's track_changes tool creates them one URL at a time from inside Claude Code, which suits the discovery week. Two MCP defaults catch people out: scheduledMonitorOptions.hosted is false, so the monitor dies with your editor unless you set it true, and a plain-English goal is judged locally only and is ignored once the monitor is hosted. Between phases you pause it, which keeps the baselines, charges nothing and still diffs across the gap when you resume. Each check costs 3 credits per target compared, blocked and errored targets are free, and management calls cost nothing. What it is not is a client-facing product: there are no per-client logins, and it holds no contact or firmographic data.

Every retainer has a sentence in it about keeping an eye on the market. Nobody bills for that sentence separately, and it is the first thing to slip in a busy month.

The manual version is a browser tab per client and a good memory. The built version is a scraper, which holds up until the third engagement. By then the thing you wrote for client one is quietly diffing a page that was redesigned in June, and nobody has noticed, because a monitor finding nothing and a monitor that is dead look identical from the outside.

A competitor monitoring api for consultants carries a constraint an in-house one does not. You are watching several markets at once, on other people's behalf, for exactly as long as each engagement lasts.

How do you keep one client's watch separate from another's?

One monitor per client. A monitor is a name, up to 20 URLs, a cron schedule and a timezone, and an account holds 50 of them. That is fifty engagements of twenty pages each before any cap is worth thinking about.

Bash
curl -X POST https://crawlforge.dev/api/v1/monitors \
  -H "X-API-Key: cf_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Northwind - competitor pricing",
    "targets": [
      { "url": "https://rival-a.com/pricing", "selector": ".pricing-table" },
      { "url": "https://rival-b.com/careers", "selector": "main" }
    ],
    "schedule_cron": "0 7 * * 1",
    "timezone": "Europe/London",
    "retention_days": 365,
    "notify_emails": ["you@yourfirm.com"]
  }'

Name it after the client. That is not housekeeping: every check writes one row to your request log carrying the monitor's name, its id and the credits it actually charged, so what did we spend watching Northwind's market in August becomes a question the log answers rather than one you reconstruct the night before invoicing.

Set timezone per monitor as well. The client's Monday morning is not necessarily yours, and a 7am check in the wrong hemisphere lands after the call it was meant to inform.

Can you drive it from Claude Code instead of curl?

Yes, and for the first week of an engagement that is the better tool. CrawlForge's MCP server exposes the same machinery through track_changes, so the discovery pass — what is even worth watching at this client? — happens in the editor you are already drafting the deck in.

Json
{
  "url": "https://rival-a.com/pricing",
  "operation": "create_scheduled_monitor",
  "trackingOptions": { "customSelectors": [".pricing-table"] },
  "scheduledMonitorOptions": {
    "hosted": true,
    "name": "Northwind - rival A pricing",
    "schedule": "0 7 * * 1"
  }
}

Two things about that call are worth knowing before you lean on it, and neither is obvious from the schema.

hosted defaults to false. A local scheduled monitor runs inside the MCP server process, so it stops the moment you quit your editor. Fine for a discovery week, useless for a retainer. Pass hosted: true and the monitor moves to CrawlForge's own scheduler, where it fires whether or not your laptop is open.

A plain-English goal does not survive the move. Locally you can write goal: "tell me when the Pro plan price changes" and a model judges each diff against it. Hosted monitors ignore goal and notify on every changed, new, blocked or errored page. The tool does return a warning saying so, which is easy to scroll past. Scope a hosted monitor with a CSS selector instead of a sentence.

There is also an arithmetic problem rather than a trap. The MCP path creates one monitor per URL, fanning customSelectors into targets on that single page, so twenty client pages that way costs twenty of your fifty monitors. The REST POST above puts all twenty in one. Use MCP for the week you are working out what matters, then one REST call for the monitor you intend to keep.

What happens between engagement phases?

Pause it. PATCH the monitor to status: "paused" and it keeps every baseline and gets no next run, so it costs nothing while it waits. Resume, and the first check diffs against the last capture from before the pause. The quiet months come back as a single change rather than as a hole in the record.

When a phase needs an answer today rather than at the next slot, POST /api/v1/monitors/{id}/run runs one check inline and hands back the pages.

Where does the deliverable actually come from?

The check history, not your memory of it. GET /api/v1/monitors/{id}/checks lists checks newest first, and reading one back returns its pages with change_percent, added and removed counts, and up to 20 sample lines from each side of the diff. That is quotable material for the what changed this quarter slide, instead of a screenshot somebody took in July.

Set retention_days on day one. It runs from 1 to 365 and defaults to 30, and checks older than the window are pruned at the end of each run and do not come back. A twelve-month engagement that wants its own history at close-out has to say 365 at the start; there is no way to ask for it in month eleven. The endpoint reference is in the docs.

What does watching a client's market cost?

Three credits per target fetched and compared, the track_changes price, whether the call came from REST or MCP. Blocked and errored targets are not charged. Creating, updating, pausing and deleting monitors are free.

Twenty pages on a Monday schedule is four or five checks in a 30-day window, so 240 to 300 credits. Ten clients on that pattern stay under 3,000 credits a month between them. There are no seats and no ceiling on how many pages you may watch, which is a different post.

The consequence worth acting on is that breadth is cheap and frequency is not, so watch more pages less often. A rival's careers page quietly posting an account executive role in Munich tells you more about their next two quarters than their pricing page will, and it changes maybe twice a year.

What it won't do

  • No client-facing view. One account, one key, no per-client login and no access boundary between monitors. What the client sees is what you send them.
  • No contact or firmographic data. It reads pages you point it at, above whatever database your research already runs on. It is not an Apollo or a ZoomInfo and does not pretend to be.
  • robots.txt is always respected, with no override. A disallowed path reports ROBOTS_DISALLOWED on every check and is never charged for it.
  • Five minutes minimum between runs, which makes this a daily and weekly instrument. That is the rhythm of a report anyway.

If you want the change routed into a CRM or a channel rather than written into a document, the webhook side is here.

Start free with 1,000 credits, about two months of one client's five-page daily watch, or open the monitors dashboard and read a real check before you write any code.

Try this yourself — no signup needed

Run any of the 30 CrawlForge scraping and extraction tools available in the playground, then start free with 1,000 credits.

1,000 free credits • One-time • No credit card required

Tags

consultantscompetitor monitoringmonitorstrack_changesmcp

About the Author

C

CrawlForge Team

Engineering Team

Building the most comprehensive web scraping MCP server. We create tools that help developers extract, analyze, and transform web data for AI applications.

Stay updated with the latest insights

Get tutorials, product updates, and web scraping tips delivered to your inbox.

No spam. Unsubscribe anytime.

Put this into practice

Test CrawlForge's tools on any URL — free, no signup.

On this page

Frequently Asked Questions

Can a client log in and see their own monitor?+

No. Monitors belong to the account that created them, and there are no per-client logins, shared workspaces or access boundaries between one monitor and another. In practice that suits most engagements, because you are the one reading the checks and deciding what belongs in the report, but it does rule out handing someone a live dashboard of their own. What you can hand over is an export: the request log downloads as CSV with the date, tool, target URL, credits and status for every check that ran.

Should I create monitors from the MCP server or the REST API?+

MCP while you are still working out what to watch, REST for the monitor you intend to keep. The track_changes tool with operation create_scheduled_monitor is quicker to reach for mid-conversation in Claude Code, but it registers one monitor per URL and hardcodes the timezone to UTC, so a twenty-page client watch becomes twenty of your fifty monitors on a schedule that is not the client's working day. One REST POST puts the same twenty URLs in a single monitor with the timezone you want. Set scheduledMonitorOptions.hosted to true either way, or the monitor only runs while your editor is open.

How many clients fit on one account?+

Fifty monitors, each with up to 20 targets, so a thousand watched pages across fifty engagements. Every monitor also takes up to five notification email addresses, which is usually enough to copy the engagement lead alongside yourself. Nothing is reserved by having a monitor exist: an idle or paused monitor bills nothing, so the cap is on how many watches you can define, not on how many you can afford to keep.

What happens to a monitor when the engagement ends?+

Pause it or delete it. Pausing keeps the baselines and the check history, stops the schedule and charges nothing, so a client who comes back in six months resumes against the page as it was when you stopped. Deleting removes the monitor and its checks together, which is the right call when the client has asked you to stop holding their research. Credits are tied to neither: an unspent balance stays on the account for the next engagement.

Can I bill the monitoring back to the client?+

Each check writes exactly one usage-log row recording the credits actually charged, the monitor name and id, and the per-page outcome, so the spend is attributable to a client rather than pooled. At the one-time 1,000-credit pack rate a credit is $0.003, which makes one page compared about $0.009 and a twenty-page weekly watch roughly a dollar a month. Small enough that most firms carry it inside the retainer rather than itemise it, but auditable either way if a client asks what the line covers.

Related Articles

Competitor Monitoring API Pay As You Go: What a Check Costs
Use Cases

Competitor Monitoring API Pay As You Go: What a Check Costs

Monitoring plans meter pages and seats. CrawlForge meters one thing — a target actually compared, at 3 credits, about $0.009 a check.

C
CrawlForge Team
|
Sep 9
|
4m
Competitor Monitoring API for RevOps: No Scraper to Run
Use Cases

Competitor Monitoring API for RevOps: No Scraper to Run

One POST puts up to 20 competitor URLs on a cron. CrawlForge diffs them and sends a signed webhook — no per-monitor fee, nothing on your side to babysit.

C
CrawlForge Team
|
Sep 7
|
4m
MCP Server for Due Diligence: What an Agent Can Verify
Use Cases

MCP Server for Due Diligence: What an Agent Can Verify

It will not hand you a registry database. What it adds is a traceable path from every line of the memo back to the page it came from.

C
CrawlForge Team
|
Sep 4
|
4m

Footer

CrawlForge MCP

Enterprise web scraping for AI Agents. 31 specialized MCP tools designed for modern developers building intelligent systems.

Product

  • Features
  • Playground
  • Pricing
  • Use Cases
  • Integrations
  • Alternatives
  • Changelog

Resources

  • Getting Started
  • API Reference
  • Templates
  • Guides
  • Blog
  • Glossary
  • FAQ
  • Sitemap

Developers

  • MCP Protocol
  • Claude Desktop
  • Cursor IDE
  • LangChain
  • LlamaIndex

Company

  • About
  • Contact
  • Privacy
  • Terms
  • Acceptable Use
  • Security
  • Cookies

Stay updated

Get the latest updates on new tools and features.

Built with Next.js and MCP protocol

© 2025-2026 CrawlForge. All rights reserved.