The first version of bulk detection made a bad assumption. It looked for the best phone column in a file. If the file had both mobile and home, one could win and the other would be skipped.
I wanted it to handle both. A second phone column is still part of the file someone asked us to check, and the same problem applies to two email columns or two postal columns.
Detection now considers each source column separately. If both mobile and home contain phone numbers, both appear in the preview. Each gets its own carrier, caller ID, and live-status choices, so you can ask different questions about each column.
Here is a small file that makes those choices easier to follow.
Start with the whole file
Download the example input CSV. It has six fictional records, two countries, and two phone columns:
record,country,mobile,home
demo-1,US,(202) 555-0100,(202) 555-0101
demo-2,GB,07700 900123,020 7946 0958
demo-3,US,+1 202 555 0100,(202) 555-0101
demo-4,GB,07700 900123,020 7946 0958
demo-5,US,,+1 202 555 0100
demo-6,GB,07700 900124,
The numbers come from the North American fictional-number range and UK drama-number ranges. They let us discuss the file without using anyone's contact details. This is an input example, with no carrier, assignment, or reachability results attached.
There are two deliberate blanks. demo-5 has only a home number; demo-6 has only a mobile number. A blank cell should stay empty while the other number on that row can still be processed. The record column gives you a simple way to follow each row through the download.
Upload the file to Bulk phone. The preview should identify mobile and home separately and recognize country as a country column. You do not have to split this into two files or move one set of numbers into the other column.
Choose the work for each column
For this walkthrough, keep Format phone numbers selected under both mobile and home. It includes the numbering-plan validation and formatting; that choice stays on for detected phone columns.
Turn Add carriers off under both columns. It starts selected, so check each group. Leave Add caller names and Check live numbers off as well. Those are useful when a real contact list needs those answers, but they are separate checks. A number can pass validation without being assigned or reachable.
You can also turn Expand countries off if you only want phone results. The original country cells remain available as context for the phone columns. Adding country names and currencies is a separate choice from reading the country code already in the file.
The choices belong to their source columns. On another file, you might want carrier details for mobile and formatting alone for home. Changing the choice for one does not silently select it for the other. Review the updated preview and quote before starting the run; the current quote is the price for the work you selected.
Keep the country beside the number
The US rows use US, and the UK rows use GB. Bulk can read that value from each row, so there is no need to force the whole file through one country choice.
In each phone column's settings, Country comes from should point to country. With one recognized country column, Bulk can make that connection automatically. It needs the context to interpret a national number such as 020 7946 0958. A number written with + and its calling code, such as +1 202 555 0100, already carries its own country.
The country must describe the number you are interpreting. If a person's home and mobile numbers are from different countries, write the numbers in international form or map a separate country column for each. A contact's mailing country is not enough to establish where every number belongs.
If a country cell is missing, an explicit country choice can supply the missing context. Do not set a blanket country merely to make the warning disappear on an international file. The country-column example explains how row context and a fallback work together.
Ten cells, five unique phone inputs
The example contains ten non-empty phone cells. Several repeat:
demo-1anddemo-3write the same US mobile number in national and international form.demo-2anddemo-4repeat both UK numbers.demo-5puts the first US mobile number in thehomecolumn.
Using the file's country context, the counts are:
| Source column | Non-empty cells | Unique inputs within the column | Additional inputs across both columns |
|---|---|---|---|
| mobile | 5 | 3 | 3 |
| home | 5 | 3 | 2 |
The home column contributes two additional inputs because its third distinct number already appeared in mobile. That gives five unique phone lookup inputs across the two selected columns. These counts describe the work to perform. They do not say how many numbers will pass validation.
The same sharing applies when the same additional check is selected on both columns. A repeated number needs one carrier lookup for that check, and its answer can appear beside both inputs. Carrier and caller ID still answer different questions, so selecting both does not merge them into one check.
Sharing a lookup also does not remove a row. Both source cells need their result, even when one column contributes no new lookup inputs.
Read the download by source column
When a run finishes, Download CSV gives you the original rows with results inserted after the column they describe. The source mobile and home values stay in place. Their normalized forms go into new fields.
For these two phone columns, the source names also distinguish the result headers:
| Mobile result | Home result | Meaning |
|---|---|---|
parse_mobile | parse_home | Normalized phone number |
parse_mobile_valid | parse_home_valid | Whether the number passes numbering-plan validation |
parse_mobile_national | parse_home_national | National display format |
parse_mobile_international | parse_home_international | International display format |
parse_mobile_duplicate | parse_home_duplicate | Whether the same input appeared earlier in this source column |
These are selected fields, not the entire export header. Keep the original record value when joining the results back to your application. An empty result remains empty; do not replace every blank with false when importing the CSV.
The duplicate flag has a narrower meaning than the shared lookup count. It follows each source column independently. Here are the duplicate fields for our example:
record,parse_mobile_duplicate,parse_home_duplicate
demo-1,false,false
demo-2,false,false
demo-3,true,true
demo-4,true,true
demo-5,,false
demo-6,false,
Download the duplicate-field excerpt, which also retains the original input columns. It was calculated locally from this fixture using Bulk's duplicate rules. It is an illustrative excerpt, not a completed Bulk job, and contains no lookup verdicts.
Notice demo-5: its home duplicate flag is false. The number already appeared in mobile, so it adds no new phone lookup, but this is its first appearance in home. On demo-3, both flags are true because both numbers have appeared earlier in their respective columns. A blank source gets a blank duplicate field.
If you open the actual result in a spreadsheet, Protect spreadsheet cells adds an apostrophe before formulas and number-like text to help preserve it. Leave that option off when your importer needs the original cell text. The leading-zero example shows what can happen to a ZIP code before it reaches the upload page.