The best "how did you hear about us" options are a short list of 8 to 12 channels you actually pay for or work on, written the way a customer would say them, followed by a "Referral" option with a name field and an "Other" option with a text box. If you want lead source data you can make budget decisions on, pair the question with something people can't misremember, such as a different text number or keyword printed on each yard sign, mailer, radio spot and web page. This post gives you a list to copy, explains why customer answers drift, and shows the setup and the cost of tracking source by number.
The list comes first, because that's what most people searching this need right now. The tracking method comes after it, because the form question on its own will give you a pie chart where "Google" takes up too much of the space.
How did you hear about us options you can copy
Pick from these groups. Delete anything you don't spend money or time on, because an option you never use only adds noise.
Search and maps
- Google search
- Google Maps / Google Business Profile
- Bing or another search engine
- AI assistant (ChatGPT, Gemini, etc.)
Social
- TikTok
- YouTube
- Nextdoor
- LinkedIn (B2B)
People
- Friend or family member (please tell us who: ______)
- Existing customer
- Another business referred me
- Online review site (Yelp, Angi, etc.)
Offline and paid
- Yard sign or job-site sign
- Postcard or mailer
- Radio
- TV or streaming ad
- Billboard
- Vehicle wrap / saw your truck
- Drove past our shop
- Newspaper or magazine
- Event, trade show or sponsorship
Catch-alls
- Email or newsletter
- I'm a returning customer
- Don't remember
- Other: ______
Form design rules that make the answers usable
- Keep it to roughly 8 to 12 options. Long lists push people toward the first plausible answer.
- Put "Other" and "Don't remember" last, and keep them. If you remove "Don't remember", people guess, and a guess looks exactly like real data.
- Add a name field to "Referral". A name is something you can act on. "Friend" on its own is not.
- Split Google search from Google Maps. They come from different work: your website versus your Business Profile and reviews.
- Use the customer's words. "Saw your truck" gets picked. "Fleet branding" gets skipped.
- Make it required on intake, optional on the web form. A required field on a contact form costs you some submissions. At intake, a staff member can ask it out loud.
Industry swaps
- Home services: add "Saw a job in my neighborhood" and "Door hanger".
- Healthcare and dental: add "My doctor referred me" and "My insurance directory".
- Ecommerce: add "Influencer or creator" and "Podcast", and drop the street-level options.
- B2B and SaaS: add "Webinar", "Partner or integration" and "Sales call".
Why self-reported attribution is unreliable
The question is still worth asking. The answers just measure memory, and memory is not the same as the path the customer took.
- Last touch wins. Someone sees your yard sign three times, hears your radio spot once, then searches your name. They answer "Google", because that's the step they remember. Your sign did the work and the search gets the credit.
- "Google" is a verb, not a channel. Many people say Google for anything they found on a phone, including Maps, an ad, or a review site they reached through search.
- Order bias. In a dropdown, the options near the top get picked more often than they should, especially by people in a hurry.
- Staff fill in blanks. On phone intake, a busy front desk tends to pick the most common answer when the caller hesitates.
- Referral names drop off. People select "Friend" and skip the name box, so you can't thank the person or reward them.
None of this means the data is useless. As a rough guide, treat survey answers as directionally right about the big channels and least reliable for offline media like radio, print and signs. That's frustrating, because offline media is usually the spend you most need to justify.
A better way: one number or keyword per channel
The fix is to make the channel identify itself. If each piece of marketing carries its own way to reach you, the first text or call tells you where the lead came from, with no question asked.
There are two ways to set this up.
Option 1: a dedicated local number per channel
Print a different number on each channel: one for yard signs, one for mailers, one read out in the radio spot, one on the website. When someone texts or calls, the number they used is the source.
- Pros: works for texts and calls, needs nothing from the customer, can't be misremembered.
- Cons: each number costs money monthly, and you need to keep straight which number went where.
Option 2: one number, a keyword per channel
Print one number everywhere, but ask people to text a different word: "Text SIGN to…", "Text POSTCARD to…", "Text RADIO to…". The first word of the conversation tells you the channel.
- Pros: one number to manage, so no extra number cost.
- Cons: people paraphrase ("hi saw ur sign") or skip the word. Callers bypass it completely. Never use STOP, HELP, START or UNSUBSCRIBE as a keyword, since carriers and opt-out handling treat those as commands.
In Ready, a texted keyword lands in the conversation thread in the inbox (and in GoHighLevel for connected accounts), so you can read the channel at a glance. Reading it is still up to you or your team, though. If you want an automatic first reply after someone texts in, our auto reply text message examples post has wording that works.
What each method shows you
| Channel | Number per channel | Keyword per channel | What the form question gives you |
|---|---|---|---|
| Yard sign | Exact count of texts and calls to the sign number | Count of "SIGN" texts, minus people who skipped the word | Often recorded as "Google" |
| Mailer | Exact count to the mailer number | "POSTCARD" texts | Often "Don't remember" |
| Radio | Calls and texts to the radio number | Weak, because listeners rarely remember a word | Often recorded as "Google" |
| Website | Texts and calls to the web-only number | "WEB" texts | Usually accurate |
| Extra cost | $2/mo per number | None | None |
What it costs in Ready: a worked example
This example uses stated assumptions, not a real customer. Say a home-services business runs four channels (yard signs, a mailer, radio and the website) and wants a number for each.
Registration and numbers (monthly):
- Brand: $10/mo
- Campaign: $20/mo
- Numbers: 4 × $2 = $8/mo
- Total: $33/mo
Every tracking number sits on the account's registered 10DLC campaign. Registration has no setup fee: the first charge is the first month when you submit, and most approvals take 2 to 7 days. Our 10DLC cost breakdown walks through every line of that.
Messages: Ready bills $0.0075/segment on the Standard rate plus a $0.0045 carrier fee per segment, and that applies to replies you receive as well as texts you send. Assume 200 people text in across the four channels in a month, and each thread is one inbound text plus one reply from you, each a single segment of 160 GSM-7 characters or fewer:
- 200 × 2 = 400 segments
- 400 × $0.0075 = $3.00, plus 400 × $0.0045 in carrier fees
That all-in figure excludes the compliance surcharge. Scrubbing and landline validation each add $0.003 per segment if you switch them on for the account, and both are off by default.
Keep replies short. An emoji drops a segment to 70 characters, so a 140-character reply with one emoji is 3 segments instead of 1. Ready already converts curly quotes and long dashes into plain characters, so those don't change the count.
Calls: radio listeners often call rather than text. The same numbers take inbound calls through the Ready Dialer, billed at $0.025/min. Calls ring the dial pad when it's open, and missed calls show up as a Missed call card in the contact's Inbox thread. Someone needs to have the pad open during business hours for this to work.
Setting it up without breaking attribution
- Buy one local number per channel and label each in a spreadsheet or the number's name: "Radio, spring", "Mailer: ZIP 30318".
- Print or read only that number in that channel. One mailer showing the website number ruins the split.
- Keep the website number off every page other than the website, including your email signature and Google Business Profile. If you want Business Profile as its own source, give it a fifth number.
- For web forms, use a hidden field instead of a number. Capture the UTM source on submit and keep the "how did you hear about us" question as a cross-check. If you text links back to people, use your own domain, not a public shortener. Our post on shared short links getting filtered explains why.
- Reply to the conversation they started, but don't move them into marketing without consent. Someone texting your sign number wants an answer to that conversation. Adding them to promotional campaigns requires opt-in, and that consent record belongs in your form or intake system. Ready records the sender's attestation for bulk and API sends, but it doesn't store each recipient's opt-in, and a keyword text doesn't create one. Opt-outs are honored automatically across every number on the account, and a reply to someone who texted you in the last 24 hours goes out right away. Campaigns, drip campaigns and automations sent in the recipient's quiet hours wait up to 24 hours for the window. A one-to-one or API text is held only if the window opens within 6 hours; otherwise it's not sent, and you send it again once the window opens. (A contact who signs up on a Ready-hosted opt-in page is the exception: Ready stores that sign-up, with the time, IP address and exact wording, and support@tryready.com can send you a copy.)
- Compare monthly: contacts per channel divided by that channel's spend gives you a cost per lead you can trust more than the survey.
For platforms: if you run software that texts on behalf of your own customers, the same pattern works in code. You can buy numbers with POST /v1/numbers and read conversations with GET /v1/messages. See the messages API docs for the fields.
Where this approach is weaker
Ready doesn't do dynamic number insertion, which is swapping the phone number on your website based on the visitor's ad click. If you need keyword-level attribution for paid search calls, a dedicated call-tracking tool handles that better. Per-channel numbers are strongest for offline media, which is exactly where the survey question performs worst.
The practical takeaway
Keep the "how did you hear about us" question, trimmed to the channels you actually run, with "Referral (who?)", "Other" and "Don't remember" at the bottom. Then let the channel identify itself: a number or keyword per sign, mailer and radio spot. For four channels, that's $8/mo in numbers on top of registration. Compare the two data sets after a month, and you'll see which channels the survey has been under-crediting.
If you want to try it, create an account. To send, you add a card and get a number, which is $2 a month with the first month charged when you get it. Your first 20 one-to-one texts are free, so use them before you register. Rates are on the pricing page.
FAQ
How many "how did you hear about us" options should a form have? Roughly 8 to 12, plus "Other" and "Don't remember". More than that and people tend to pick the first plausible answer.
Should the question be required? Make it required at intake, where staff can ask it out loud. On a website contact form, make it optional, because a required field there can cost you submissions.
Is a tracking number per channel better than a keyword? For offline channels, usually yes. A number works for calls as well as texts and doesn't depend on someone typing a word correctly. Keywords cost nothing extra and work for text-only channels where people tend to follow instructions.
Do tracking numbers need 10DLC registration? Yes. Every texting number sits on your registered 10DLC campaign. Registration covers the brand and campaign, and each number is $2/mo on top. Our 10DLC explainer covers the basics.
Can I add someone who texted my yard sign to marketing campaigns? Not on the strength of that text alone. Reply to their conversation, and collect explicit opt-in before sending promotions. Store the consent record in your own form or intake system, because a keyword text doesn't count as one.