Skip to content
iMessage APIs
Operations9 min read

Bulk iMessage sending without burning the line

The line costs the same whether you send fifty messages or five thousand. That pricing model is the trap: nothing in the bill tells you when you have gone too fast.

Almost every provider in this category charges per phone line per month rather than per message. The obvious conclusion — send as many as you like, it is free at the margin — is the single most expensive mistake available to you, because the constraint is not billing. It is Apple.

What the number actually is

Your line is a real Apple identity on real Apple infrastructure, and Apple's anti-abuse systems evaluate it as they would any other. They are not looking at your invoice; they are looking at behaviour. Volume, timing regularity, message similarity, how many recipients have never messaged you, and how many block or report you. What is physically behind that number is worth understanding.

The failure mode is silent

A throttled or flagged line does not usually return an error. Your API calls keep returning 200 and your dashboard stays green while delivery quietly collapses. If you are not watching the delivered rate as a ratio of sends, you can lose a week before anyone notices. Why numbers get flagged, and how to recover.

A warm-up schedule that works

PeriodMessages per dayPer minuteWhat you are watching
Days 1–310–201–2That anything is delivering at all
Days 4–730–502–4Delivered rate holding above 95%
Week 260–1004–6Reply rate — real conversations matter here
Weeks 3–4100–2006–10Block and complaint signals
Steady stateProvider's stated capPaced, jitteredWeek-over-week delivered rate
Conservative and deliberately slow. Providers publish their own limits; treat theirs as the ceiling and this as the ramp toward it.

The number people quote as the point where risk climbs sharply is around a hundred new conversations a day from a single identity. Replies to existing threads are treated far more kindly than cold first contacts — the ratio between the two matters as much as the raw count.

Pacing, not bursting

  • Spread across hours, not minutes. A day's sends released over six hours is a person working; the same volume in ninety seconds is a machine.
  • Jitter every interval. Sends at exactly 12.0-second spacing are a fingerprint. Randomise ±30%.
  • Respect local time. Send in the recipient's timezone and inside legal hours. The compliance page has the specifics, and there is a better hour to send anyway.
  • Stop the run on a bad signal. If the delivered rate falls below your floor mid-campaign, halt automatically rather than finishing the batch.

Vary the message

Five thousand byte-identical messages from one number is the clearest possible bulk signal, and it is also bad marketing. Genuine personalisation — first name, the actual appointment time, the actual technician's name, the specific vehicle — makes each message different at the byte level as a side effect of being better written.

Bell HVAC

iMessage

Hi Marcus — Dana from Bell HVAC. Your Thursday 9–11 window is confirmed, and Ray's on the job. Anything you want him to look at while he's there?

yeah the upstairs vent is rattling

Three variable fields and an open question. Different every time, and it earns a reply.

Rotating between three or four templates is not the same thing and is easy to detect. Write one good message with real variables in it. How to write one.

Clean the list before you send

  1. Drop anything not on iMessage. Landlines and Android numbers will fail; some providers charge for the attempt and all of them count it against your line's health. Most offer a lookup endpoint — use it.
  2. Suppress opt-outs at send time. Not at list-build time. Somebody replied STOP forty minutes ago and the batch has been running for two hours.
  3. Deduplicate by person, not by row. The same customer with two records gets two messages, and that is how you generate a complaint.
  4. Cap per recipient per week. One message per person per week from your business is a reasonable default that almost nobody enforces.

When one line is not enough

If the arithmetic says you need more than one line's daily capacity, buy another line rather than pushing the first one harder. That is the honest read of the per-line pricing model: the line is the unit of capacity, not just the unit of billing. The economics are worked through here.

Multiple lines bring their own decision — whether each location, team or campaign gets its own number, and what that does to the customer's thread. That trade-off is covered here.

Before a campaign of any size

  • Delivered rate is instrumented and alerting, not just logged.
  • The list has been checked for iMessage reachability.
  • Opt-outs are checked at send time.
  • Sends are paced, jittered and inside legal hours in the recipient's timezone.
  • There is an automatic halt if delivery quality drops.
  • A person is available to answer replies within the hour.
  • The link is tagged so you can tell what it did — how.
developersdeliverabilityscale