Contacts and lists
Import by CSV. Numbers are normalized and validated on the way in, so a malformed number is caught at import rather than at send.
SMS, MMS and email, billed per segment at the carrier's own count. If a message doesn't arrive, the charge comes back. Every credit and every charge sits on a ledger you can read line by line.
Get started See pricing$10 minimum to add credit. Credits never expire.
| Estimate held2,400 recipients, reserved before sending | −$36.00 |
| Hold releasedat completion, in full | +$36.00 |
| Sent2,317 messages, priced at the segments the carrier reported | −$34.76 |
| Suppressed83 recipients had opted out. Never sent, never billed | $0.00 |
| Refunded11 messages the carrier could not deliver | +$0.17 |
| Charged | −$34.59 |
That's the shape of a real bill. Most platforms charge the estimate and keep the difference. We charge what the carrier charged for, and give back what didn't land.
One rate per channel. No tiers, no feature gates, no monthly floor. SMS is billed per segment, so a long message costs more than a short one, and the composer tells you before you send rather than after.
| Channel | Billed | Rate |
|---|---|---|
| SMS | per segment | $0.0150 |
| MMS | per message | $0.0450 |
| per message | $0.0030 |
Sending more than 100,000 a month? Rates come down. Tell us your volume.
Everything listed here works today. Nothing is marked as coming soon, because nothing is.
Import by CSV. Numbers are normalized and validated on the way in, so a malformed number is caught at import rather than at send.
Target by tag, by list, by whether somebody has been messaged or clicked recently. A segment is a question, answered fresh every time you use it, so it stays right without anybody maintaining it.
Save the messages you send repeatedly, with merge fields where the names go. Editing a template never changes a campaign already sent.
One contact list, three channels. Send now or schedule it, with consent checked per channel at the moment of sending.
Upload a photo and it is resized to fit what carriers accept, which is smaller than most people expect.
Send this, wait three days, then send that to whoever didn't reply. Starts itself when somebody joins a list, gets a tag, or texts a word. Anybody who opts out part way through simply stops receiving the rest.
A month view of what is going out and when, which warns you when two campaigns are aimed at the same people on the same day.
Set a window per account. A campaign scheduled inside it waits until the window opens, in your recipients' local time.
Carrier-level delivery status per message, not just "we handed it off". Failures are recorded with the carrier's own reason code.
Everything people text back, threaded, with the whole conversation in one place. Reply from the same screen.
Links on our own domain, not a shared public shortener. Shorter links mean fewer segments, which means a cheaper send.
Per-recipient attribution on shortened links, reported against messages actually delivered rather than messages sent.
Delivery, spend and clicks by date range, exportable. And a calculator that tells you what a message costs before you build a campaign around it.
An append-only ledger. Every credit, hold, charge and refund is a permanent line item, and your balance is the sum of them.
The expensive mistake in messaging is sending to someone who asked you to stop. Wally is built so that's hard to do by accident.
STOP, END, CANCEL and the rest are matched exactly against the message. Someone who writes "please don't stop sending these" stays subscribed.
An opt-out is recorded against the phone number or email address, and every send path checks the same list. There's no second place for it to be missed.
A hard bounce or a spam complaint adds the address to the suppression list without anyone having to notice.
Each record stores when consent was given, through what, and what the proof was. That's what you need when someone asks.
These are tools, not legal advice. Messaging rules vary by state and change often; review your program with your own counsel. Our messaging compliance page covers what we do and don't do.
Connect Claude, or anything else that speaks MCP, and let it send messages for you. Why that isn't reckless is worth saying plainly.
Consent, opt-outs, quiet hours and credit are enforced in our database, on every send, from every source. An agent told to message everyone about a sale gets refused for everyone who opted out. It can't be talked around them, because it isn't being asked.
One tool exists only to answer "would this send be allowed, and if not why". It's free and instant, so a well behaved agent asks first rather than finding out by failing.
Give it permission to send and nothing else, or to read your contacts and never write. Revoke it in one click. Every call it makes is logged against the key that made it.
Automated callers time out and try again. Send an idempotency key and the retry returns the original result instead of a second text your customer receives and you pay for.
{
"mcpServers": {
"wally": {
"url": "https://api.wallysolutions.com/mcp",
"headers": { "Authorization": "Bearer wly_live_..." }
}
}
}
Rather write the code yourself? The REST API is described at openapi.json, and a key takes about a minute to create.
We were paying about $150 a month to send perhaps six campaigns a year.
Two products, one for email and one for surveys, both billed monthly whether we used them or not. In a quiet quarter we paid roughly $450 to send nothing at all. The pricing was not unfair, it was just built for somebody else: companies that send every week, to a list that grows every week.
That is not how most businesses actually send. A shop messages customers when something changes. A service company sends reminders in a season. A nonprofit sends before an event and then goes quiet for months. Everybody in that shape is paying a subscription to be ready, rather than paying to send.
So we built the thing we wanted to buy. Add credit, send when you need to, pay for what actually arrives, and stop for six months without cancelling anything or losing your list. There is no plan to upgrade to and nothing that gets switched off if you go quiet.
The rest of the decisions on this site follow from that one. Billing is a ledger you can read because we wanted to check ours. Failed messages are refunded because we were tired of paying for texts that never arrived. Segment counts are shown before you send because we had been surprised by a bill made of curly quotes.
Including the ones with awkward answers.
Open an account, add credit when you're ready to send, and stop whenever you like. There's nothing to cancel.
Get started