iMessage best practices
How much an iMessage line can carry, and how to keep it in good standing.
Apple has no published sending rules for iMessage. It flags lines by how they behave, because it can't read what they send. A flagged line delivers less, or gets cut off. These are Keiki's rules for keeping a line healthy. Build your agent and your onboarding around them.
Capacity per line
| Keiki guideline | |
|---|---|
| Messages per day | Up to 5,000 per line, inbound and outbound combined |
| New conversations per day | Fewer than 50 per line, in any rolling 24 hours |
| Active users per line | 400–500 for moderate, conversational use; 200–400 for intensive use |
| Messages per hour | No fixed number. Spread sends across the day and never burst |
- A new conversation is the first message a line sends to someone it has never messaged before. Replies in an existing conversation don't count toward the daily 50.
- Stop adding users to a line at 70–80% of its capacity. That leaves room for busy days. Add another line before you need it.
- Users per line depends on your traffic. To estimate it, divide 5,000 by the messages an average user sends and receives in a day. At 10 a day, a line holds about 500 users. At 25 a day, it holds about 200. Measure the real average on one line before you put more users on it.
- Treat 5,000 a day as a ceiling, not an hourly budget. 5,000 spread evenly is about 200 an hour, but real traffic comes in peaks. A line that sends a hundred or more messages within a few minutes looks automated, even on a quiet day.
What Keiki enforces
The table above is what to plan for. Separately, Keiki enforces two hard daily ceilings, both pooled across all your lines for the current UTC day:
- 7,000 sent messages per active line. Past it, Keiki refuses every send with
daily_line_volume_reached, replies included. - 50 new conversations per active line. Past it, Keiki refuses only sends that would open a new conversation, with the same reason. Conversations that already exist keep working.
Because the counts are pooled, one busy line can use headroom from a quiet one. Both reset at midnight UTC. Staying within the guidelines keeps you well clear of either ceiling.
What gets a line flagged
When a line is flagged, the cause is almost always one of these, in the hour before:
- Bursts. Many messages from one line in a short window, or several messages to one person within seconds.
- One-way traffic. Broadcasting to people who don't write back.
- Chasing silence. Following up again and again with someone who has stopped replying.
- Cold outreach. Messaging people who never asked to hear from you.
- Odd hours. Sending in the middle of the recipient's night.
Volume alone rarely flags a line. The risk comes from high volume combined with few replies. A line that suddenly sends far more than it usually does, or wakes up after a quiet stretch, gets more scrutiny for about a week.
Start every conversation well
- Let the user text first. Put an
sms:link on your site or in your app, with the first message filled in, for examplesms:+15555550123?body=Hi. A conversation the user starts carries far less risk than one your line starts. - Keep the first message plain text. Send links, media and iMessage app cards only after the user has replied, so that links preview and open properly.
- Share a contact card early. Send one after the first exchange so the user can save the agent. See Contact cards.
- Get three replies early. A conversation where the user has written back at least three times is treated as trusted. Ask a simple question that's easy to answer.
Keep conversations two-way
- Aim for about one reply for every two messages the agent sends. On an ongoing basis, each user should be writing back a few times a week.
- Write like a person. Send one message rather than three in a row, and space out multi-part answers.
- Back off when someone goes quiet. Wait about a day, then follow up once. If there's still no reply, wait a few more days and try once more. Then send one last message that makes stopping easy, such as "Want me to stop checking in?", and send nothing more until they reply. Never send more than two or three follow-ups, and space them over days, not hours.
- Honor opt-outs immediately. When someone says stop, the agent sends no more
messages to them. Keiki refuses further sends to an opted-out contact with
opted_out.
Spread the load
- Onboard users across several lines. A single line taking on a wave of new users draws attention, even when the users text first.
- Grow a new line gradually. Increase its daily volume step by step over its first weeks. Don't move an existing audience onto a fresh line and resume your usual pace.
- Fix a struggling line; don't abandon it. If a line starts to look unhealthy, slow it down and work on reply rates. Moving its users to another line takes the same sending pattern with them.
- Mix Android and SMS users in. Don't give them lines of their own. Their messages fall back to SMS or RCS, where carrier rules apply.
- Keep every line active. A line with no traffic for about two months can be deactivated.