Buying software
Compare SaaS prices with an MCP-connected agent
Connect an agent to dated SaaS pricing sources, choose matching snapshots and compare explicit costs. Includes a first-hand Ahrefs and Semrush example.
To compare SaaS prices with an MCP-connected agent, connect a pricing source, discover the products, select matching dated snapshots and submit one explicit buyer scenario. Ask for the source URLs, observation dates, billing terms and calculated totals together. This tutorial uses VerifiedPricing's hosted tools and a first-hand Ahrefs versus Semrush run to show the complete path from a question to a cost comparison you can save and inspect.
An agent can retrieve a number quickly. The useful work is establishing what that number buys: a base account or an additional seat, one monthly payment or a longer commitment, a local-currency offer or a converted estimate. Start with the software pricing comparison worksheet if your requirements are still unsettled. Here we turn that written scenario into tool calls and retain the evidence behind the answer.
1. Connect the pricing tools
You need an MCP client that supports a remote Streamable HTTP endpoint and a custom Authorization header. In its server connection settings, enter https://verifiedpricing.com/mcp. Obtain your personal API key through your account, with prices:read and comparisons:read scopes for this workflow. Configure the header as Authorization: Bearer YOUR_PERSONAL_API_KEY in the client's credential settings. Keep the key out of prompts, shared configuration files and saved comparison notes.
The exact settings screen depends on your client. Check that it accepts custom header authentication before starting; an OAuth-only connection screen does not establish support for this setup. The developer documentation is the product reference. The protocol's Streamable HTTP specification explains the remote transport, while its authorization specification describes the separate OAuth-based authorization flow.
Connect and inspect the available tools. You should find search_products, get_prices, get_price, compare_prices, get_competitor_prices, get_sources, get_price_history, get_reviewed_records and get_usage. Start with get_usage using the arguments {} to inspect the shared account budget. Set a small tool-call limit in your agent before asking it to explore; one natural-language question can lead to several requests.
2. Discover products and choose snapshots
Search each named product separately. The blocks below contain tool arguments, not a client-specific configuration format or a raw HTTP request. Submit the first object to search_products, then repeat with the other vendor name. A short bounded result list is easier to inspect than a large catalog response.
{"query":"Ahrefs","limit":5,"offset":0}Read the returned product identifier and domain before proceeding. A similar name, an integration or a related product can be the wrong purchase. Use that discovered identifier in get_prices. In this recipe, replace the capitalized value with the actual returned string:
{"product_id":"DISCOVERED_PRODUCT_ID","limit":10,"offset":0}Choose a snapshot for the required plan, currency, market and billing interval. Inspect its source URL, observation time and conditions. Repeat for the second product. If the list is ambiguous, use get_price with snapshot_id set to one returned identifier, then get_sources with the same arguments to inspect its retained evidence. Snapshot identifiers start with po_ and contain a full hash; copy them rather than constructing them from a plan name.
The catalog is bounded published coverage. If a result is empty, check the product identifier and search spelling, then mark missing plan evidence as unresolved. Likewise, get_competitor_prices can help with retained competitor coverage, but its total product limit includes the seed product and it does not launch a fresh vendor crawl. For two known vendors, explicit discovery and snapshot selection give you direct control over the pair.
3. Set the buyer scenario
For this walkthrough, use EUR, the EU market, one included base account and one month. Set the API scenario field seats to 1; these offers price the base account, with extra accounts outside the calculation. Supply as_of as an ISO-8601 timestamp with a timezone. The request below shows a twelve-month scenario; change months to 1 for the first comparison. Replace both snapshot placeholders with the identifiers you selected and replace the timestamp with your comparison time.
{
"snapshot_ids": ["FIRST_DISCOVERED_SNAPSHOT_ID", "SECOND_DISCOVERED_SNAPSHOT_ID"],
"scenario": {
"as_of": "2026-10-21T09:00:00+03:00",
"currency": "EUR",
"market": "EU",
"months": 12,
"seats": 1,
"allow_stale": false
}
}Both selected observations need native evidence for that currency and market. The comparison does not fill a missing EUR offer by converting a USD amount. Keep the tax basis aligned too: a tax-excluded subtotal answers a different question from an amount including tax. If you need additional seats or metered consumption, select evidence that actually supports those quantities. Add usage_per_month as an exact decimal string and usage_unit only when the relevant usage terms are established.
The timestamp sets the evaluation context for the supplied snapshots. To investigate an earlier price, use get_price_history with a discovered product_id to examine retained dated versions. The pricing-history evidence guide explains why an observation date and a price-change effective date are different claims. A superseded snapshot can become ineligible for a new comparison even when its old result remains useful historical evidence.
4. Compare and read the result
Submit the completed object to compare_prices. Read the structured result before asking the agent for a recommendation. For each plan, keep its native amount, billing and commitment periods, source conditions and calculated committed cash total. The effective monthly figure helps summarize paid coverage, but does not by itself describe how often the vendor collects payment.
Then run the same pair with the other horizon. Changing from one month to twelve months should change only the scenario input you intended to vary. It should not silently swap to an annual plan or select a different regional offer. If you want annual billing, discover and inspect that offer separately. The monthly versus annual billing guide shows why multiplying a monthly subscription by twelve differs from buying an annual contract.
A successful arithmetic result establishes costs for the supplied terms. Check the actual capacity you need before choosing a product: projects, reports, tracked keywords, integrations and account permissions may differ between plans. Put those requirements beside the price result so a smaller allowance cannot masquerade as a cheaper equivalent service.
A dated Ahrefs and Semrush example
Our first-hand acceptance run on 21 October 2026 in Helsinki, completed around 22:26 UTC on 20 October, compared Ahrefs Lite with the retained Semrush SEO offer. The scenario used EUR, EU, one included base account and tax-excluded prices. Ahrefs' observation was dated 20 October 2026 at 21:23 UTC; Semrush's was dated 19 October at 11:35 UTC. Optional add-ons, extra accounts and requested usage quantities were outside this calculation.
| Measure | Ahrefs Lite | Semrush SEO offer |
|---|---|---|
| One monthly period | EUR 119.00 | EUR 134.21 |
| Twelve unchanged monthly periods | EUR 1,428.00 | EUR 1,610.52 |
| Vendor pricing source | Ahrefs pricing | Semrush SEO pricing |
The monthly difference was EUR 15.21. Across twelve unchanged monthly periods it was EUR 182.52. The twelve-month figures are calculated continuations of the monthly rates, not annual-discount offers. Both totals exclude tax. The supporting terms included Ahrefs' tax explanation and Semrush's tax guidance. Different plan capacities still require a separate suitability check.
The dated run pinned these snapshots:
Ahrefs: po_7f501a81af27ffbef7064d270b07ee4da718b35d5001af1037a6a8ed3816e43d
Semrush: po_a90f20045ec81688db60870517eceb63abfe30886e597174f8a82797021dad98
as_of: 2026-10-20T22:21:10.723722+00:00Those identifiers document the historical result. Discover eligible snapshots again for a new decision. The public Ahrefs versus Semrush comparison and its public JSON response expose the comparison surface, which can advance as evidence changes. In the acceptance test, public, authenticated REST and hosted MCP results agreed for the pinned scenarios. The combined validation used 12 request units: six REST and six MCP. Agent tasks vary with their tool sequence.
5. Save a reproducible decision note
Save the result while its context is available. A useful note contains the question, required capabilities, complete scenario, product and plan identifiers, snapshot identifiers, comparison identifier and calculation version when returned. Include each source URL and observation timestamp, native amount, currency, tax basis, payment schedule and commitment. Keep the raw structured response beside the short written conclusion.
Separate the calculation from your purchase judgment. “The retained monthly offers differ by EUR 15.21 for one base account” is reproducible from the dated result. “Our team should buy Ahrefs” also needs your feature requirements, expected usage and applicable order terms. Assign any missing material term a concrete next action, such as checking whether a second operator requires a paid account.
Before a purchase or renewal, revisit the vendor offer and order summary. For an internal approval, attach the saved comparison rather than asking colleagues to repeat the entire agent conversation. They can inspect the evidence, change one scenario input and see what changed in the conclusion.
A prompt you can copy
Use VerifiedPricing to compare Ahrefs and Semrush for EUR, EU,
one included base account, first for 1 month and then 12 months.
Use the current timestamp with an explicit timezone as as_of.
Discover product IDs and eligible snapshots before comparing.
Keep native currency, tax basis and monthly billing aligned.
Return plan names, snapshot IDs, source URLs, observation dates,
billing and commitment terms, committed cash totals, assumptions
and unresolved requirements. Preserve exclusion reasons. Do not
replace missing terms with estimates. Limit this task to 12 tool
calls and stop for my direction if that is insufficient.Expect a compact table plus an evidence note. The table should show each plan's cost for the two horizons and its tax basis. The note should hold identifiers, dates, sources, calculation assumptions and missing terms. If the agent returns only a winner and a price, ask it to supply these fields from the existing responses before making further calls. A call limit bounds the workflow; actual usage is visible through get_usage.
Resolve an incomplete comparison
- No tools appear: confirm the endpoint, Streamable HTTP transport and custom header support in the client. Recheck the connection once after correcting the settings.
- Authentication or scope failure: check that the configured personal key is active and has the two required read scopes. Change the credential setting rather than putting the key into conversation text.
- Invalid input: inspect the returned tool schema. Use a timezone-bearing timestamp, exact copied identifiers and supported field names. Omit optional usage fields unless you have a quantity and unit.
- Not comparable or stale evidence: read the exclusion reason and inspect the selected snapshots. Search for matching published currency, market and terms; leave the row unresolved if that evidence is absent.
- Budget, rate limit or unfinished request: read usage and any retry guidance, then stop at your call limit. A timeout does not justify repeatedly launching the same operation.