Agents / Guide
Build a sales battlecard from competitor pricing pages before a deal
Turn up to three competitor URLs into a battlecard with verified pricing tiers, hidden fees, landmine questions, objection handling and a talk track.
The job to be done
Before a competitive deal, someone reads the rival's site, copies their pricing into a document and guesses at the gaps. The Competitor Pricing Battlecard does that reading for up to three sites: it fetches the homepage and the pricing page, extracts positioning and pricing tiers, checks each price against the page text, computes a cost comparison in code for the deal size you give, and writes the landmine questions, objection handling and a talk track.
Describe your product, including its price
Required fields are ourProductDescription and competitorUrls (1 to 3 homepage or pricing URLs; a same-site pricing page is discovered automatically). The optional scenario object takes seats and monthlyVolume and is used to compute the monthly and annual cost per verified tier.
Put your own price in the description as a simple unit price, such as "$0.02 per document". With that wording the response priced our side at $200 a month for a monthlyVolume of 10,000. When we wrote the price as "$0.002 per 1,000 characters" it was not parsed: pricing_comparison began "Our price could not be parsed from the description" and our column stayed empty. Check that the units in the comparison line up (a per-document price against a per-character tier is not a like-for-like comparison).
curl -sS --max-time 120 -X POST "https://$RAPIDAPI_HOST/v1/competitor-battlecard" \
-H "Content-Type: application/json" \
-H "X-RapidAPI-Key: $RAPIDAPI_KEY" \
-H "X-RapidAPI-Host: $RAPIDAPI_HOST" \
-d '{
"ourProductDescription": "Acme Redact is an API that removes personal data from text, with usage-based pricing ($0.02 per document) and no minimum.",
"competitorUrls": ["https://www.twilio.com/en-us/pricing"],
"scenario": { "monthlyVolume": 10000 }
}' > battlecard.jsonRead it the way a rep would
The run took about 26 seconds for one competitor, so use a client timeout of at least two minutes and run it ahead of the call, not during it. The response includes headline, confidence, and per competitor: positioning, target_segment, pricing_model, pricing_tiers, hidden_fees_and_limits, strengths, weaknesses, landmine_questions and objection_handling. Top-level talk_track and next_steps close it out.
Trust the verification fields before the prose. priceVerification lists each tier with a status such as verified (the price was found in the page text); our Twilio run verified the Conversation Intelligence price of $0.005 per 1,000 characters. evidence_gaps lists the claims the page did not support, for example that the page showed no dedicated PII redaction product, and fetchFailures names any site that could not be read, in which case the result is a signed partial result.
jq -r '.data.competitors[] | "== \(.name)", (.landmine_questions[] | "ask: " + .)' battlecard.json
jq -r '.data.evidence_gaps[] | "confirm: " + .' battlecard.jsonMake it a habit
Pricing pages change without notice, so a battlecard is only as good as its date. Generate one per deal, keep the generatedAt timestamp on it, and confirm every item in evidence_gaps with the prospect before you use it as a claim. Competitor pages are read as published; anything behind a login or a sales form is not in the result.
Try it
- Subscribe on RapidAPI and call it with your key.
- Prefer to pay per call in USDC with no account? The same request body goes to
POST https://agents.writerslogic.com/api/v1/competitor-battlecard; see the endpoint documentation. - Every response is signed and can be checked for free at
POST https://agents.writerslogic.com/api/v1/verify-provenance.