DEV Community

tigerops-win
tigerops-win

Posted on

Why I killed the $9 pack and priced per lookup at $0.10

Scout Packs started as packs: 25 verified B2B leads for $9, paid in USDC on Base. No accounts, no API keys — that was the whole pitch. Then I looked at how agent wallets actually spend, and killed the packs as the primary product. Now it's one lookup for $0.10, paid per call.

This isn't a story about a magic price point. It's about a unit that didn't match how the buyer works.

What a pack assumes

A pack makes sense when a person decides once, "I'll need about this many," and spends down a balance. That assumes:

  • A balance stored somewhere.
  • Something to key that balance to: an account, an API key, or at least a wallet address.
  • A way to check and decrement it on every call.
  • Answers to refund, expiry, and "I bought the wrong pack" questions.

That's an account system wearing a trench coat. My pitch was no accounts. The pack quietly reintroduced one.

What an agent wallet assumes

The x402 flow is one payment per request: the agent hits an endpoint, gets a 402 with a price, and decides — is this answer worth $0.10 right now? There's no wallet UI for "buy a bundle first." The flow is request → challenge → pay → data, in one round trip.

And the people running agents bound them. Agent wallet policies typically cap per-call spend somewhere between a fraction of a cent and about $0.75. A $9 pack is a commitment decision the agent was never designed to make, and it's outside what most agent wallets will spend in one shot. In plain terms, a pack moves the purchase decision away from the moment of need. Per-call keeps it right there.

Picking $0.10

I didn't find a formula. What I weighed:

  • Wallet policy range. The price has to sit inside what agent wallets are configured to spend per call — roughly $0.005 to $0.75. $0.10 is comfortably inside.
  • My cost per lookup. The leads come from a curated database I assembled, so marginal cost per call is near zero. The price is almost entirely margin, which is the point of the experiment.
  • What's next to me in directories. Indexes list a price beside every endpoint. Agents and the people configuring them see your price in a row of comparable services. $0.10 reads as "cheap enough to try."
  • Settlement reality. Each payment settles on-chain on Base. Fees there are small but not zero, and they come out of the same $0.10.

The question per-call pricing forces: do you charge for a miss?

With packs, a lookup that finds nothing just burns a credit and nobody notices. Per call, the agent is explicitly paying for an answer that turns out to be empty — and an agent that pays for nothing stops coming back.

My answer: a miss is free. The lookup endpoint checks the database before issuing the 402. If there's no verified contact for the query, it returns a plain 404 with no payment terms at all. The agent only ever sees a price when there's actually something to sell. That ordering — match check first, paywall second — is the whole trick, and it's three lines of code.

A bug worth avoiding: floats

USDC uses 6 decimals, and the challenge wants the amount in atomic units as a string. The tempting code is Math.round(0.1 * 1e6). It works for 0.10. It's a habit that bites the first time someone configures 0.07 or adds fees. Parse prices as decimal strings instead:

// "0.10" -> "100000"  (USDC has 6 decimals)
export function usdToAtomic(usd: string, decimals = 6): string {
  const [dollars, cents = ""] = usd.split(".");
  const frac = (cents + "0".repeat(decimals)).slice(0, decimals);
  return BigInt(dollars + frac).toString();
}
Enter fullscreen mode Exit fullscreen mode

Prices live in config as strings like "0.10". They never become floats.

What I'd tell someone pricing for agents

  • Price the unit the agent decides on. For a lookup API, that's one lookup.
  • Don't build state you promised not to have. If your pitch is no accounts, a balance is an account.
  • Keep money as strings or bigints, end to end.
  • Decide what a failed call costs before an agent decides for you by never coming back.

Scout Packs: https://scout-packs-production.up.railway.app

Top comments (0)