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 (1)

Collapse
 
florian_bansac profile image
Florian Bansac •

The match check before the 402 is the part I'd copy. The price only shows up when you can actually deliver, so refund logic never has to exist.

One thing I'd watch: once agents learn a 404 is free, some will use it as a free coverage probe and only pay when they already know there's a hit. For a leads database that gives away a bit of value. Have you seen that pattern in your logs yet, or is $0.10 low enough that nobody bothers?

Same lesson shows up when people sell agent work to humans. Sell a bundle up front and you end up building credits, accounts and refund rules before you know what buyers actually ask for. Pricing the single request first and watching what repeats tells you far more.