Quick answer
Import customers with their city in a Location field, build a segment with In radius 30 km from the store's city and split out who has a phone. Schedule a WhatsApp campaign and an email campaign with date, time and time zone, plus a reminder on the morning of the opening.
Invite everyone who lives in the cities up to 30 km from your new store to its opening, by WhatsApp or email, at a set time and with a reminder on the day.
What you need
- Paid BIP Lite with WhatsApp connected (the email part works on the free plan)
- A spreadsheet of customers with name, email or phone, and each one's city
- The City field, of type Location, created in Settings
- A Marketing WhatsApp template approved by Meta
- The date, time and address of the opening
What you'll get
- An audience with every city up to 30 km from the new store, built from your spreadsheet.
- Existing contacts who visit your site with the BIP script come in too, by the city of their last visit.
- The invite by WhatsApp for people with a phone and by email for everyone else, with no repeated messages.
- An invite scheduled with date, time and time zone, and a reminder on the morning of the opening.
- Your BIP Lite sends calculated in advance, with no surprises on the day.
How it works
- 1Bring in your customers with their city in a Location field
- 2Build the segment of cities within a 30 km radius
- 3Schedule one campaign per channel, with a reminder on the day
The radius picks cities. BIP stores each contact's location as a city, marked on the map by its center. The 30 km circle around Joinville selects the cities whose center falls inside it, with all the contacts in those cities. Joinville comes in whole, from any neighborhood, and a neighboring city is either in or out as a whole: if its center is 32 km away, nobody from there comes in, not even people who live right by the city line. Location doesn't go down to neighborhoods or street addresses.
The city comes from a Location field. Contacts who arrive through a spreadsheet or the API don't have First / Last Location: those two come from the browser, when the person signs up or visits your site with the BIP script. That's why the city from your spreadsheet goes into a custom field of type Location. At import, BIP looks up each city by name and stores the city it finds, with its point on the map. Existing contacts who visit your site with the script come in through a second criterion, Last Location, combined with Any (OR).
Each campaign has one channel. There are two campaigns: one on WhatsApp, for people with a phone, and one by email, for people without one. That way, each person gets the invite only once. The day-of reminder is two more, duplicated from the first two.
Step by step
The WhatsApp template depends on Meta's approval. Do step 6 first, so it's Approved by the time you build the campaigns.
1. Create the City field
- In Settings → General, go to Fields and click Add Field.
- In Field Type, choose Location.
- In Field Name, type City and click Save.

Screenshot coming soon
2. Import the spreadsheet with the city
- In Leads, click Import Leads and upload the spreadsheet. There's a template in Ready to copy.
- In Map Columns, BIP already suggests Name, Email and Phone from the header. Link the
citycolumn to the City field, under Custom Fields, and thetagscolumn to Tags. - In Validate Data, leave Default Country Code set to Brazil (+55):
47 99123-4567becomes+5547991234567. In Tags, add the batch tag, such asjoinville-opening. - Click Next Step, review the Confirm Import dialog and click Import N Record(s). Keep the page open until Import Complete appears.
In the tags column, write whatsapp on every row that has a phone (in Excel: =IF(C2<>"","whatsapp","")). This tag splits the channel in step 4: anyone tagged whatsapp gets the invite on WhatsApp, and everyone else by email.
Write the city with the state abbreviation, like Joinville, SC: the import stores the first city it finds with that name, and the state rules out a city with the same name somewhere else. If BIP can't find the city, the field stays empty for that contact and the rest of the row comes in normally. Anyone already in BIP is recognized by email or phone and just gets the City field, with no duplicates.

Screenshot coming soon
3. Build the radius segment
- In Segments, click New Segment. In Settings, set the Name to 30 km radius · Joinville and click Save.
- Click 0 filter(s) selected → Add Criteria → Field. In Field, choose City (Geo) and, in Operator, In radius.
- Click Select Region. In Search, type
Joinvilleand pick the Santa Catarina city from the list. In Radius, enter30and, in Unit,km. Click Close. - In the same filter, click Add Criteria again → First / Last Location. In Type, choose Last Location (Geo), the In radius operator and the same map: Joinville,
30,km. - At the top of the filter, in Match … of the following criterias:, choose Any (OR). This brings in anyone whose imported city is within the radius or who visited your site from a city within it.
- Click Close. Check N matches of T and click Save.

Screenshot coming soon
4. Split out who gets it on WhatsApp
- In the Segments list, click Duplicate on the radius segment. The copy opens as a Draft.
- In Settings, change the Name to 30 km radius · Joinville · via WhatsApp.
- Open the Filter Editor and click Add Filter. In the new filter, Add Criteria → Phone, operator Starts with, value
+55. - At the top of the editor, between the filters, choose All (AND). Close it and click Save.
- Duplicate the radius segment again and build 30 km radius · Joinville · via email the same way, with Tags → Does not include any →
whatsapp.
For contacts from the spreadsheet, the counts of the two segments add up to the radius segment's count: each person gets the invite through one channel only. A contact who came in some other way, like your site, without the whatsapp tag, gets the email even if they also have a phone; if that phone starts with +55, they get the WhatsApp invite as well.

Screenshot coming soon
5. Create the invite email
- In Emails Templates, click New Template and then Settings.
- In Name, type Joinville opening · Invite. In Language, keep English, which is what new templates start with.
- Fill in Subject and Preview with the texts from Ready to copy and click Save.
- Build the blocks in the order of the table in Ready to copy. In the Button, set the Link URL to the page with the store's address and map.
- Click Preview → Send Preview Email, check it in your inbox and click Save.
- For the reminder, click Duplicate in the template list, change the Name to Joinville opening · It's today, the Subject, the Preview and the texts, and save.

Screenshot coming soon
6. Create the WhatsApp templates
- In WhatsApp, open the Templates tab and click Create template.
- In Identity, fill in Name (lowercase)
horizonte_inauguracao_convite_en, Category Marketing and Language English (US). - In Header, choose Text as the Header type and write the Header text. In Body, paste the Body text with
{{1}}and, in Variable Samples, fill in a first name, like Marina. In Footer, write the fixed line. - In Buttons, click Add button: one of Type URL, with the Text Get directions and the full address of the store's page, and another Quick reply, with the Text I'll stop by.
- Click Save Template. The status starts as Pending and changes to Approved on its own.
- Repeat with
horizonte_inauguracao_hoje_en, the reminder template.
The texts and the JSON for Import from JSON are in Ready to copy.

Screenshot coming soon
7. Schedule the invite on both channels
- In Campaigns, click New Campaign. In Campaign Name, type Joinville opening · Invite · Email and choose the Group.
- In Schedule Type, choose One-time. In Start Date, choose
30/10/2026(October 30); in Time,10:00; in Timezone, BRT (Sao Paulo) (-03:00). - Leave Allow Lead Re-entry off: each person gets the invite once.
- In Channel, choose Email. In From Name, type Loja Horizonte and, in Email Template, switch on Joinville opening · Invite.
- In Segments, switch on only 30 km radius · Joinville · via email.
- Click Save → Save Draft, then Test Campaign. Enter the email of a contact who's already in BIP, ideally yourself, and click Send Test.
- Click Save → Save and Schedule and confirm with Schedule Campaign. The campaign becomes Scheduled.
- In the Campaigns list, click Duplicate on this campaign. In the copy, change the name to Joinville opening · Invite · WhatsApp and the Channel to WhatsApp. The copy comes with a blank Start Date: choose
30/10/2026,10:00and the time zone again. - In WhatsApp Template, choose
horizonte_inauguracao_convite_en. In Variable mappings, click Add variable mapping and link Body · {{1}} to first name. - In Segments, switch off the email segment and switch on 30 km radius · Joinville · via WhatsApp. Test with one of your contacts who has a phone and schedule it the same way.

Screenshot coming soon
8. Schedule the day-of reminder
- In the Campaigns list, duplicate the email invite campaign. Change the name to Joinville opening · It's today · Email. The copy's Start Date comes blank: choose
07/11/2026(November 7), Time08:00and the time zone. - In Email Template, switch on Joinville opening · It's today. Test and schedule.
- Duplicate the WhatsApp invite campaign. Change the name, choose the date and time the same way, and pick the
horizonte_inauguracao_hoje_entemplate. When you change the template, the mapping is cleared: link Body · {{1}} to first name again. Test and schedule.
Each copy is a new campaign, so whoever got the invite also gets the reminder. In the list, all four campaigns show up as Scheduled.

Screenshot coming soon
Ready to copy
Sample spreadsheet
Copy it, paste it into a text editor and save it as joinville-customers.csv. The city column goes into the City field (type Location).
name,email,phone,city,tags Marina Alves,marina.alves@exemplo.com,47 99123-4567,"Joinville, SC",whatsapp Tiago Pereira,tiago.pereira@exemplo.com,,"Araquari, SC", Sofia Costa,,47 98876-5432,"Joinville, SC",whatsapp Rafael Lima,rafael.lima@exemplo.com,41 99765-4321,"Curitiba, PR",whatsapp
| Contact | City | Inside the 30 km radius of Joinville? | Gets it via |
|---|---|---|---|
| Marina Alves | Joinville | Yes | |
| Tiago Pereira | Araquari | Yes | |
| Sofia Costa | Joinville | Yes | |
| Rafael Lima | Curitiba | No: Curitiba's center is more than 30 km from Joinville | — |
Marina has email and phone and gets it only on WhatsApp. Tiago has no phone and gets the email.
Segments
30 km radius · Joinville. Both criteria go in the same filter, with Any (OR).
| Filter | Criterion | Operator | Value |
|---|---|---|---|
| 1 | Field → City (Geo) | In radius | Search Joinville, Radius 30, Unit km |
| 1 | First / Last Location → Last Location (Geo) | In radius | Search Joinville, Radius 30, Unit km |
30 km radius · Joinville · via WhatsApp. Filter 1 with Any (OR); between the filters, All (AND).
| Filter | Criterion | Operator | Value |
|---|---|---|---|
| 1 | Field → City (Geo) | In radius | Search Joinville, Radius 30, Unit km |
| 1 | First / Last Location → Last Location (Geo) | In radius | Search Joinville, Radius 30, Unit km |
| 2 | Phone | Starts with | +55 |
30 km radius · Joinville · via email. Same as the previous one, with a different criterion in filter 2: anyone tagged whatsapp in the spreadsheet is left out.
| Filter | Criterion | Operator | Value |
|---|---|---|---|
| 1 | Field → City (Geo) | In radius | Search Joinville, Radius 30, Unit km |
| 1 | First / Last Location → Last Location (Geo) | In radius | Search Joinville, Radius 30, Unit km |
| 2 | Tags | Does not include any | whatsapp |
📍 30 km radius · Joinville — Cities up to 30 km from Joinville, by the City field or by the last site visit 💬 30 km radius · Joinville · via WhatsApp — Gets the opening invite on WhatsApp 📧 30 km radius · Joinville · via email — Gets the opening invite by email
Invite email
Wherever you see [@first name], type @first, choose lead.firstName() and use friend as the Fallback Value. Replace the address and the link with your store's.
[@first name], Loja Horizonte opens in Joinville on November 7
Saturday at 9 a.m., at Avenida Horizonte, 1500. A free gift for the first 100 customers.
Loja Horizonte is coming to Joinville, [@first name]!
On Saturday, November 7, we're opening the first Loja Horizonte in Joinville. You're in our area, and you're one of the first to know.For the first three days, the whole store has grand-opening prices. And the first 100 customers on Saturday get a free gift from us.
Get directions
Avenida Horizonte, 1500, Centro, Joinville (SC). Saturday, November 7, 9 a.m. to 8 p.m.
| Order | Block | Suggested setting |
|---|---|---|
| 1 | Add Image | Loja Horizonte logo, Max Width (px) 160 |
| 2 | Add Image | The storefront or the opening artwork |
| 3 | Add Heading | The heading with the first name |
| 4 | Add Text | The two paragraphs of the invite |
| 5 | Add Button | Get directions, with the store's address page |
| 6 | Add Text | Address and hours |
| 7 | Add Social Networks | Only the networks the store uses |
Day-of email
It's today, [@first name]: Loja Horizonte opens at 9 a.m. in Joinville
Avenida Horizonte, 1500, Centro. The first 100 customers get a free gift.
It's opening day!
Loja Horizonte opens its doors at 9 a.m., at Avenida Horizonte, 1500, Centro, Joinville. Stop by to see the store, enjoy the grand-opening prices and pick up your gift.
WhatsApp templates
horizonte_inauguracao_convite_en · MARKETING
URL button Get directions: https://www.exemplo.com.br/joinville. Quick reply button: I'll stop by. Anyone who taps it within 24 hours of the send counts toward Reply Rate, and the conversation continues in the WhatsApp Business app.
horizonte_inauguracao_hoje_en · MARKETING
| Variable in the campaign | Lead field | Sample value |
|---|---|---|
| Body · {{1}} | first name | Marina |
The mapping is the same in both templates. Paste the JSON into WhatsApp → Templates → Import from JSON to create both at once:
[
{
"name": "horizonte_inauguracao_convite_en",
"category": "MARKETING",
"language": "en_US",
"components": [
{ "type": "HEADER", "format": "TEXT", "text": "Loja Horizonte is coming to Joinville" },
{ "type": "BODY", "text": "Hello, {{1}}! On Saturday, November 7, at 9 a.m., Loja Horizonte opens its doors in Joinville, at Avenida Horizonte, 1500, Centro. For the first three days, the whole store has grand-opening prices, and the first 100 customers get a free gift. We look forward to seeing you!", "example": { "body_text": [["Marina"]] } },
{ "type": "FOOTER", "text": "Loja Horizonte · Joinville (SC)" },
{ "type": "BUTTONS", "buttons": [
{ "type": "URL", "text": "Get directions", "url": "https://www.exemplo.com.br/joinville" },
{ "type": "QUICK_REPLY", "text": "I'll stop by" }
] }
]
},
{
"name": "horizonte_inauguracao_hoje_en",
"category": "MARKETING",
"language": "en_US",
"components": [
{ "type": "HEADER", "format": "TEXT", "text": "It's today!" },
{ "type": "BODY", "text": "Good morning, {{1}}! Starting at 9 a.m. today, Loja Horizonte opens its doors at Avenida Horizonte, 1500, Centro, in Joinville. The first 100 customers get a free gift. See you soon!", "example": { "body_text": [["Marina"]] } },
{ "type": "FOOTER", "text": "Loja Horizonte · Joinville (SC)" },
{ "type": "BUTTONS", "buttons": [
{ "type": "URL", "text": "Get directions", "url": "https://www.exemplo.com.br/joinville" }
] }
]
}
]Campaign schedule
All of type One-time, with Timezone BRT (Sao Paulo) (-03:00) and Allow Lead Re-entry off. The reserved sends come from an example with 4,800 contacts in the radius: 3,600 via WhatsApp and 1,200 via email.
| Campaign | Channel | Segment | Start Date | Time | Reserved sends |
|---|---|---|---|---|---|
| Joinville opening · Invite · Email | 30 km radius · Joinville · via email | 30/10/2026 | 10:00 | 1,200 | |
| Joinville opening · Invite · WhatsApp | 30 km radius · Joinville · via WhatsApp | 30/10/2026 | 10:00 | 3,600 | |
| Joinville opening · It's today · Email | 30 km radius · Joinville · via email | 07/11/2026 | 08:00 | 1,200 | |
| Joinville opening · It's today · WhatsApp | 30 km radius · Joinville · via WhatsApp | 07/11/2026 | 08:00 | 3,600 | |
| Total | 9,600 |
If both campaigns on each date used the whole radius segment, each one would reserve 4,800, and the total would climb to 19,200, with anyone who has both email and phone getting the invite on both channels. The split segments cut the reservation in half.
📧 Joinville opening · Invite · Email 💬 Joinville opening · Invite · WhatsApp 📧 Joinville opening · It's today · Email 💬 Joinville opening · It's today · WhatsApp
How to measure
- Before scheduling: close each segment's Filter Editor and note N matches of T. For the spreadsheet contacts, the WhatsApp and email segments add up to the radius segment.
- Before each date: on the Usage card, Remaining has to cover that date's reserved sends. In the example, 4,800 on each one.
- Email invite: in Campaign Stats, track Delivered, Open Rate and Click Rate. In Top clicked links, Get directions shows who went looking for the address.
- WhatsApp invite: track Delivered, Read Rate and Reply Rate. Each tap on I'll stop by counts as a reply.
- Who showed interest: in Recipient Interactions, filter by Clicked and click View Lead to open each person's profile.
Variations
Email only, on the free plan
The free plan doesn't include WhatsApp, but it handles the email part: use the whole radius segment in both email campaigns, invite and reminder. The month's 1,000 free sends cover both if the segment has up to 500 contacts.
Both channels for everyone
Want people with email and phone to get it on both? Use the 30 km radius · Joinville segment in both campaigns, email and WhatsApp. Each campaign reserves the segment's full count, and anyone without a phone shows up under Errors in the WhatsApp campaign.
A bigger radius or one more city
To reach more cities, increase the Radius in both criteria of filter 1. To include a specific city that was left out, add the criterion Field → City (City) → Contains → the city name to filter 1. With Any (OR), it comes in along with the cities in the radius.
Contacts that arrive through the API
Through the API, send the city in the City field, just like in the spreadsheet. BIP looks up the city by name and stores it in the Location field:
"fields": [{ "key": "City", "value": "Joinville, SC" }]See the full body in API: send contacts automatically.
Frequently asked questions
Why don't the spreadsheet contacts come in through Last Location?
First / Last Location comes from the browser: from the sign-up the person makes themselves and from visits to your site with the BIP script. Contacts that were imported or created through the API don't have those two. For them, the city lives in the City field, of type Location, and the filter is Field → City (Geo).
Can I invite just one neighborhood in Joinville?
Not by location: it's always by city, and the radius selects the cities whose center falls inside the circle. To reach a neighborhood, store it in a column linked to a String field, such as Neighborhood, and filter by Field → Neighborhood → Equals → the neighborhood name.
Do people with email and phone get the invite twice?
With this guide's segments, no: spreadsheet contacts with a phone get it only on WhatsApp, and the email goes to those without one. If you use the whole radius segment in both campaigns, that person gets it on both channels.
What if the opening date changes?
Open each scheduled campaign and click Pause Campaign to Edit. Change the Start Date, adjust the email template text and click Save → Save and Schedule. Approved WhatsApp templates don't change: for a new date in the text, create another template with a new name.
See also
- Segments: the 10 criteria to filter contacts
- Import contacts from a spreadsheet
- Campaigns: one-time, recurring and API-triggered
- WhatsApp templates: create, sync and use
- Email editor: blocks, variables and preview
- Plans and limits: sends, capacity and pricing
- Site script: page views and clicks tied to the contact
- Location-based marketing on the BIP website
- BIP for retail