Text messages with your own Twilio account
Text clients from your office number, let them text you photos of their documents, and (optionally) text the portal link whenever a request, questionnaire, signature request or invoice goes out. Taxporch connects to your own Twilio account: your firm is the sender of record, you register the number yourself and you pay Twilio directly. We add no markup.
What it costs (paid to Twilio, not to us)
Twilio's US list prices at the time of writing; check twilio.com/sms/pricing/us for today's numbers.
| Item | Approximate cost |
|---|---|
| Local phone number | about $1.15 per month |
| Text message (SMS), sent or received | about 0.8 cents per 160-character segment, plus carrier fees of roughly 0.3 to 0.5 cents |
| Picture message (MMS) | about 2 cents, plus carrier fees |
| A2P 10DLC brand registration | one-time, roughly $4 to $45 depending on brand type and vetting |
| A2P 10DLC campaign | one-time vetting fee (about $15) plus a monthly fee of roughly $1.50 to $10 |
A firm sending 500 texts a month typically pays Twilio well under $15 a month all in. For comparison, TaxDome's built-in texting runs on Twilio too and costs about 4 cents per message.
1. Create a Twilio account and buy a number
- Sign up at twilio.com with your firm's legal name and business email. Upgrade from the trial (trial accounts can only text verified numbers and add a "Sent from a Twilio trial account" prefix).
- In the Twilio Console go to Phone Numbers → Buy a number and buy a local number with SMS and MMS capability. You can also port your existing office number into Twilio.
- Copy your Account SID and Auth Token from Account → API keys & tokens (or the Console home page).
Optional: create an API key (Standard) under Account → API keys. If you enter one, Taxporch uses it to send texts. The Auth Token is still required, because Twilio signs every incoming webhook with it and we check that signature.
2. Register for A2P 10DLC (required for US local numbers)
US carriers block or filter business texts from local numbers that aren't registered. Registration is done by your firm, in your Twilio Console, under Messaging → Regulatory compliance → A2P 10DLC. Approval usually takes a few days to two weeks.
- Brand. Register your firm: legal name exactly as on your IRS records, EIN, business address, website, and an authorized contact. Sole proprietors without an EIN can use the "Sole Proprietor" brand type (lower limits, one number).
- Campaign. Create a campaign with: - Use case: "Account Notifications" (or "Mixed" if staff also reply to client questions, or "Customer Care"). - Description: "Texts from [Firm name] to its tax clients who opted in: notices that a document request, questionnaire, signature request or invoice is waiting in our secure client portal, and replies to client texts. No marketing." - Sample messages: "[Firm name]: you have a new item to review in your secure portal: https://... Reply STOP to opt out." and "[Firm name]: reminder, an item is waiting for you in your secure portal: https://... Reply STOP to opt out." - How clients opt in: "Clients opt in on our secure client portal by entering their mobile number and ticking a box with this disclosure: I agree to receive text messages from [Firm name] at this number about my account: document and signature requests, invoices and replies to my texts. Message frequency varies. Msg & data rates may apply. Reply STOP to opt out, HELP for help. Consent is not a condition of service. Staff may also record verbal or written consent given by phone, in person or on a signed form; the date, staff member and a note are recorded." Attach a screenshot of the portal page Text messages (your clients reach it from the portal to-do list or at /portal/texts). - Opt-out keywords: STOP, UNSUBSCRIBE, CANCEL, END, QUIT. Help keyword: HELP. Opt-in keyword: START. - Help message: "[Firm name]: help for text messages. Call or email us: [phone] / [email]. Msg & data rates may apply. Reply STOP to opt out." - Tick that messages include links and that there is no embedded phone number, no age-gated content and no direct lending.
- Assign your number to the approved campaign (Twilio does this through a Messaging Service it creates for the campaign).
- Add this sentence to your website privacy policy (carriers check it): "Mobile numbers and text messaging consent are not shared with third parties or affiliates for marketing purposes."
Prefer not to register a 10DLC campaign? A toll-free number with Twilio's free toll-free verification also works with Taxporch.
3. Connect Twilio in Taxporch
- Go to Settings → Integrations → Text messages (Twilio) (owners and admins).
- Paste the Account SID and Auth Token (and the API key if you made one). We check them with Twilio, store them encrypted and never show them again.
- Pick your number from the list (or type it as +15551234567) and click Use this number. We set the number's incoming-message webhook to Taxporch through the Twilio API, so clients' replies and photos arrive without any manual step.
- Send a test text to your own mobile.
- Optional: tick Also text the portal link to text clients who opted in whenever a request, questionnaire, signature request or invoice (or its reminder) goes out.
To disconnect, click Disconnect on the same page. Texts stop at once, the credentials are deleted and the webhook is cleared. The message log and consent records stay, because you need them as proof.
4. Getting consent (TCPA and carrier rules)
Taxporch never texts a client who hasn't opted in. There are two ways to record consent:
- The client opts in on the portal. They enter their mobile number and tick the box with the disclosure above. We record the number, the exact disclosure text, the time, the IP address and the contact, then send a confirmation text ("you're signed up... Reply HELP for help, STOP to opt out").
- Staff record consent on the client's Texts tab: mobile number, verbal or written, and a note on who agreed, when and how. Use this only when the client really agreed; keep any signed form in the client's documents.
Rules Taxporch follows for you:
- STOP, STOPALL, UNSUBSCRIBE, CANCEL, END, QUIT (any capitalization) opt the number out immediately. Twilio also blocks further texts to that number and sends the one confirmation the carriers require.
- START or UNSTOP opts the number back in.
- HELP gets an automatic reply with your firm name, phone and email.
- Quiet hours: automatic texts are never sent between 9 pm and 8 am in your firm's time zone (Settings → Firm & branding); they wait until 8 am. Texts your staff type and send are sent right away.
- At most one automatic reminder text per number every 20 hours.
- Consent belongs to a phone number. If a client changes number, they need to opt in again.
- Every opt-in and opt-out is kept in an append-only consent history and in your audit log (sms.opt_in, sms.opt_out). Keep it at least 4 years, the TCPA limitation period.
What stays your responsibility: only text clients about their own matters (no marketing without separate express written consent), honor opt-outs your staff hear by phone or email (record them on the Texts tab), and mind clients in other time zones or states with stricter calling hours (for example Florida and Oklahoma: 8 am to 8 pm).
5. Day to day
- Texts tab on each client: the whole conversation with each contact, delivery status for every text (queued, sent, delivered, undelivered, failed with Twilio's error code), consent status, and a box to send a text of up to 320 characters (two segments).
- Clients text photos. Pictures and PDFs a client texts to your number are downloaded with your Twilio credentials, stored encrypted in the client's Text message uploads folder (firm only; the client doesn't see it in the portal) and then deleted from Twilio.
- New texts show on your dashboard and as a counter on the client page; owners, admins and staff assigned to the client's active jobs get an email (without the text itself).
- Unknown numbers. Texts from numbers that don't match any contact go to Unmatched texts (link on the dashboard and the settings page). Assign them to a contact (optionally saving the number on the contact) or discard them.
- Every text sent or received is in the audit log (sms.sent, sms.received), so your webhooks and automations can react to it.
Troubleshooting
| Problem | What to check |
|---|---|
| Texts show undelivered with error 30034 | The number isn't registered on an approved A2P 10DLC campaign yet. |
| Error 21610 | The client replied STOP earlier. Taxporch marks the number opted out. |
| Error 30007 | Carrier filtering. Keep texts short and plain, and make sure your campaign is approved. |
| Clients' replies don't arrive | Settings → Text messages should show the inbound webhook as set. If you use a Messaging Service, set it to "Defer to sender's webhook". |
| "Twilio didn't accept these credentials" | Copy the Auth Token again; it changes if someone rotates it in Twilio. Reconnect after a rotation. |