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).

Request
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.json

Read 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.

Print the questions to ask and the gaps to confirm
jq -r '.data.competitors[] | "== \(.name)", (.landmine_questions[] | "ask: " + .)' battlecard.json
jq -r '.data.evidence_gaps[] | "confirm: " + .' battlecard.json

Make 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.

More guides for this API