Import channels with CSV in the BTECH Programmer apps
Protect the original, then test the copy
Original GMRS-PRO/UV-PRO example. The same workflow now covers GMRS-50PRO and UV-50PRO.
Export the radio’s current channels and keep that file untouched. Edit a copy without renaming or reordering columns. Import the copy, fix every flagged row, and review the result before you write to the radio.
The original BTECH blank UV-PRO CSV example is still available below for learning the field format—not as a replacement for a fresh exact-model export.
CSV channel import
Start with the correct app and a fresh export
Use BTECH GMRS Programmer for the GMRS models and BTECH UV Programmer for the UV models. Begin with a fresh export from the current app and the radio you are programming. That export takes priority over any older example, including BTECH’s retained sample.
Prepare the CSV for import
-
Read the radio and confirm the model
Pair the radio, read its current channel list, and make sure the app identifies the model you are actually holding or programming.
-
Export a fresh working template
Export the channel list from the current app. Save the original as your rollback copy, then duplicate it and edit only the duplicate.
-
Edit values—not the structure
Keep the exported header names, column order, and CSV file type. Use one channel per row, and review the channel name, receive and transmit frequencies, tones, bandwidth, power, scan state, and other flags.
-
Import and read the errors
Import the edited file. If rows are rejected, fix the unsupported values. If every row fails, stop and compare the header with a new exact-model export instead of trying to force the file through.
-
Spot-check the whole list
Open channels from the beginning, middle, and end. Compare frequency, tones, bandwidth, power, and transmit-disable state with the source you meant to enter.
-
Write once, then read it back
Keep the phone and radio close and powered during the write. When it finishes, read the radio again and confirm the saved list. Test receive first.
Read the original BTECH example
This is the retained header and one original sample row. It demonstrates formatting only; the frequencies and settings are not a recommendation or authorization to transmit.
Swipe horizontally, or focus the code box and use the Left/Right Arrow keys.
title,tx_freq,rx_freq,tx_sub_audio(CTCSS=freq/DCS=number),rx_sub_audio(CTCSS=freq/DCS=number),tx_power(H/M/L),bandwidth(12500/25000),scan(0=OFF/1=ON),talk_around(0=OFF/1=ON),pre_de_emph_bypass(0=OFF/1=ON),sign(0=OFF/1=ON),tx_dis(0=OFF/1=ON),mute(0=OFF/1=ON),rx_modulation(0=FM/1=AM),tx_modulation(0=FM/1=AM)
,147015000,147615000,15140,0,H,25000,1,0,0,1,0,0,0,0
What the 15 fields control
These definitions explain the retained example. When an exact-model export uses a different header or allowed value, the fresh export wins.
| Field | Plain-English meaning | Format and watch-outs |
|---|---|---|
title |
Channel name shown in the app and radio | Keep it within the model’s name limit. A comma must be quoted correctly by the CSV editor. |
tx_freq |
Transmit frequency | Integer hertz: 147015000 means 147.015 MHz. This field never grants transmit authorization. |
rx_freq |
Receive frequency | Integer hertz with no decimal. Verify it separately from transmit. |
tx_sub_audio |
CTCSS tone or DCS code sent while transmitting | 0 means none. CTCSS uses frequency × 100, so 151.4 Hz becomes 15140. For DCS, copy the exact format and polarity used by a valid fresh export. |
rx_sub_audio |
CTCSS/DCS required to open receive audio | Uses the same format as tx_sub_audio. A wrong value can make a busy frequency sound silent. |
tx_power |
Transmit power level | H, M, or L when supported. Match the radio, channel, and service rules. |
bandwidth |
Analog channel bandwidth | 12500 is 12.5 kHz narrow; 25000 is 25 kHz wide. Match the system and applicable service rules. |
scan |
Includes the channel in normal scanning | 0 = off; 1 = on. |
talk_around |
Uses direct operation instead of the programmed repeater pair | 0 = off; 1 = on. Leave it off unless the intended workflow specifically uses talk-around. |
pre_de_emph_bypass |
Bypasses normal pre-emphasis/de-emphasis processing | 0 = normal processing; 1 = bypass. Preserve the exported value unless an exact technical workflow calls for a change. |
sign |
Auxiliary signaling switch in this template | 0 = off; 1 = on. Because behavior can vary by firmware, leave it as exported unless the exact-model instructions identify its use. |
tx_dis |
Disables transmission on this channel | 0 = not disabled by this field; 1 = transmit disabled. Use receive-only where required. |
mute |
Channel mute switch in this template | 0 = off; 1 = on. Preserve the export unless the workflow calls for muting. |
rx_modulation |
Receive modulation | 0 = FM; 1 = AM. On UV-PRO, 108–136 MHz AM airband is receive-only. |
tx_modulation |
Transmit modulation | 0 = FM; 1 = AM only where the radio, firmware, frequency, service, and authorization support it. A selectable value is not permission. |
Troubleshooting CSV import errors
| What happened | Likely reason | Fastest recovery |
|---|---|---|
| Columns shift or combine | Wrong delimiter or broken quoting | Reopen the fresh template and save as UTF-8 comma-separated CSV. |
| Every row is rejected | The header changed or the template is from another version/model | Export a new template and move only the row values into it. |
| Only tone fields fail | CTCSS/DCS format or polarity does not match the app | Copy the format from a valid exported row and verify CTCSS versus DCS. |
| The write finishes, but channels look wrong | Wrong model or shifted data | Stop transmitting, restore the untouched export, reconnect the correct model, and rebuild from a fresh template. |

Comments (28)
This article is almost great. Please explain the rest of the CSV fields in this article, including mute. I’m assuming that is for public safety channels that I do not want to transmit on.
I had the same question, and spent some time figuring out the answers. Here’s an annotated list of the fields:
title: up to eight letters or numbers
tx_freq: this it the transmit frequency of the radio
rx_freq: this it the receive frequency of the radio. Note that RepeaterBook listings give the repeater’s transmit frequency first.
tx_sub_audio(CTCSS=freq/DCS=number): this is the sub-audio tone sent by the radio, which many repeaters require in order to enable the repeater function
rx_sub_audio(CTCSS=freq/DCS=number): this is the sub-audio tone received by the radio in order to enable the audio signal
tx_power(H/M/L): 7/5/2 watts
bandwidth(12500/25000): Hz
scan(0=OFF/1=ON): include this channel in scans
talk around(0=OFF/1=ON): transmit on the receive frequency of the radio
pre_de_emph_bypass(0=OFF/1=ON): bypass the audio pre-emphasis/de-emphasis circuitry in the radio
sign(0=OFF/1=ON): transmit the user’s call sign after transmissions
tx_dis(0=OFF/1=ON): disable the transmitter
mute(0=OFF/1=ON): mute the audio. For example, if you don’t want to hear the received APRS signals, set this to ON
rx_modulation(0=FM/1=AM):
tx_modulation(0=FM/1=AM):
I think that mute is for digital services like ARPS where you don’t want to hear the audio. It seems to do that for me.
Turning tx_dis ON will block transmissions on that channel. You get a pop-up note on the radio’s display if you try. You should set this for channels that you are not authorized to transmit on.
I am not sure what pre-de-emp-bypass is about, but I think that you can ignore it. It is common in FM modulation (and analog recording) to insert a pole in the audio frequency response at a standardized frequency (pre-emphasis; boosts the high frequencies) and a corresponding zero in the receive audio frequency response (de-emphasis) in order to reduce perceived hiss. This works because voice and some music have less energy in the high frequencies. using pre-emphasis with digital signals might cause over-modulation.
I am guessing that setting sub-audio to 0 disables the selective calling. I hope that the number of digits discriminates between CTSS (tone) and DCS (codes). It is not common to use selective calling in receive when using a repeater. Some people use selective calling in both transmit and receive for simplex, but it’s generally bad practice.
Thanks for the info. I find that importing the sample csv file into a spreadsheet, modifying it, then exporting it in CSV format works well for me. I have lots of radio setups in RT systems and CHIRP that I can copy and paste from. I do this on a PC, you can use a cloud storage service to get the file on your phone or e-mail it to yourself as an attachment.
I got my poles and zeros backward in the pre-deemphasis comment. A zero in the transmit audio response causes the an increase in gain at higher frequencies, starting at the frequency of the zero. A pole in the receive frequency response causes a decrease in gain at higher frequencies, starting at the frequency of the the pole. This works for audio to reduce the apparent hiss at high frequencies because of the masking effect. It should be disabled for digital signals, because it can cause decoding problems.
Or just attach phone to PC via USB and drag and drop
The manual indicates import/export, where do I find the export option for the UV pro in iOS?
This is located under the channel group manager section (export/import group)
I’m looking in Settings > Channels & Groups > Channel Groups
… and I see these choices:
Import From File
Import Device Channels
Switch Device Channel Groups >
Home ->
Nearby ->
SF North Bay ->
…But I do not see a choice to Export . This is iOS version 1.7
Please advise…
Reach out to [email protected] to be walked through any setup issues
Seems like M power value is ignored when a channel is imported from CSV via iOS app and replaced with L. But when the channel with medium power is exported via the same app – it does contain M in the tx_power column. I haven’t tried import of a channel with H power though, so not fully sure if it just defaults M to L or ignores the value from CSV entirely. My radio is running hte most recent firmware version as of today.
I have changed the Channel “Title” in my spreadsheet, but when I import the CSV file, the titles will not change. I have tried to rename the file. I even did a factory reset of the radio. Still, it displays the original Titles.
I know I’m replying to a comment from over a year ago, but I came here looking for the same answer.
and the answer is that the title column values need to be in double quotes.
title,tx_freq,rx_freq,tx_sub_audio(CTCSS=freq/DCS=number),rx_sub_audio(CTCSS=freq/DCS=number),tx_power(H/M/L),bandwidth(12500/25000),scan(0=OFF/1=ON),talk around(0=OFF/1=ON),pre_de_emph_bypass(0=OFF/1=ON),sign(0=OFF/1=ON),tx_dis(0=OFF/1=ON),bclo(0=OFF/1=ON),mute(0=OFF/1=ON),rx_modulation(0=FM/1=AM),tx_modulation(0=FM/1=AM)
“FRS 1”,462562500,462562500,0,0,L,12500,0,0,0,1,0,0,0,0,0
“FRS 2”,462587500,462587500,0,0,L,12500,0,0,0,1,0,0,0,0,0
I have loaded the CSV files (one for each of the 6 groups with 29 channels in each) to the iOS app, but I can’t seem to upload them into the radio. I must be missing a step. Help!
Ok. I figured it out. First thing: CCTSS tones freqs are 4 or 5 digits (e.g.: 100.9 = “10090” and 88.5 = “8850”); Secondly, there’s a menu selection in the app to upload to the phone once you have the CSV files loaded up to the iOS app…which I finally found!
Thanks for making this guidelines and the sample .csv file available to us. Please clarify how to work with the DCS column/cells in the .csv files, as the advice in your guidelines #“2” is a bit confusing: If the DCS given is eg “D025” like on several RepeaterBook pages Ive seen, what *exactly* do we type into the DCS Number column of our .csv file? Thanks again for your advice.
Im on two UV-Pro’s, with the ios app.
Thanks for making this guidelines and the sample .csv file available to us. I use your sample .csv file on my Macbook Pro, erase contents from the cells, fill in my content, then Airdrop into my iphone to load into the channel groups in the BTech UV-Pro app. Please clarify how to work with the DCS column/cells in the .csv files, as the advice in your guidelines #“2” is a bit confusing to me: If the DCS info given is eg “D025” like on several RepeaterBook pages Ive seen, what exactly do we type into the DCS Number column of your .csv file? For example, do I literally write “DCS025” into the cell of the DCS column for a given channel? (That didnt workk to get the info to my radio-i end up using the DCS scroll in the radio in the app to fill in DCS codes). And if I need to add a “N” or “L” at the end as a 7th digit, where do I find the info to tell me if its the “L” or “N”? I dont see something like that on RepeaterBook.com. Please, type out a line for inside a cell that would be exactly whats needed for a DCS of “D025”. I own 2 UV-Pro’s and am using the ios app.
For those of us without a lot of repeater knowledge, could you please explain the numbers in column tx_sub_audio(CTCSS=freq/DCS=number) more fully
Thanks
My phone, an I 17, will not pair with my UV-PRO. Any tips?
To pair your UV-PRO device with iOS, you need to pair it within the UV-PRO app itself. It seems that you’re trying to connect your device through the Bluetooth settings of your phone, which is not the correct way. Therefore, we suggest you follow the steps below to pair your device with your iPhone:
1. Make sure your UV-PRO device is turned on and in pairing mode.
2. Open the UV-PRO app on your iOS device.
3. Follow the on-screen instructions to complete the pairing process.
However, before pairing your UV-PRO device, you need to delete any prior pairings in the Bluetooth settings of your iPhone. To do this, please follow the steps below:
1. Go to “Settings” on your iPhone.
2. Tap on “Bluetooth.”
3. Find your UV-PRO device in the list of paired devices and tap on the “i” icon next to it.
4. Tap “Forget This Device” and confirm the action.
Additionally, you may also need to reset your network settings on your iPhone to fix any connectivity issues. To do this, please follow the steps below:
1. Go to “Settings” on your iPhone.
2. Tap on “General.”
3. Scroll down and select “Reset.”
4. Tap on “Reset Network Settings” and confirm the action.
Once you have completed these steps, try pairing your UV-PRO device again by following the instructions given above. If you’re still experiencing issues after following these steps, please let us know, and we’ll do our best to assist you further.
When entering DCS tones, simple enter only the number. DCS 053N is entered as “53”. DCS 465N is entered as “465”.
To enter a DTCS code in the CTCSS/DCS column simple enter the 3 digit code. eg D053N is entered as “53”. The leading zero is dropped and the N/I is ignored. D455 is entered as “455”.
I tried these all manner of ways possible and found success by dropping all the prefix/suffix and just entering the 3 digit numeral.
I exported the CSV channel list for a newly-created, empty group, and noticed that there is a new field, prior to the “mute” field. This is with firmware version 0.9.2. Here is what the new header line looks like:
title,tx_freq,rx_freq,tx_sub_audio(CTCSS=freq/DCS=number),rx_sub_audio(CTCSS=freq/DCS=number),tx_power(H/M/L),bandwidth(12500/25000),scan(0=OFF/1=ON),talk around(0=OFF/1=ON),pre_de_emph_bypass(0=OFF/1=ON),sign(0=OFF/1=ON),tx_dis(0=OFF/1=ON),bclo(0=OFF/1=ON),mute(0=OFF/1=ON),rx_modulation(0=FM/1=AM),tx_modulation(0=FM/1=AM)
Does anyone know the meaning of the “bclo” field?
Send your file for quick review to [email protected]
BCLO is Busy Channel LockOut. You can find each header by turning on your radio, connecting to it via the app, go to channels and groups and edit a channel. Each header is listed down the right side in the app.
Hey I have a great idea make it compatible with CHIRP or a csv file format similar to what would be commonly downloaded from repeater book or other similar site. Probably returning because of the ridiculous effort it takes to program when other radios are practically copy, paste and done.
I have the same problem as the previous user asking where the export is. I too, only have add, import from file, import device channels, and switch device channel group. There is no export in that menu. This is using firmware version 0.9.3, and the iPhone version of the software for the UV-50PRO. Please advise.
Hi Travis — the Export control is group-specific rather than part of the top-level import menu. First use Import Device Channels to save the radio’s channels as an app group. Then open that saved group and choose Export/Share to create the CSV. Please also update BTECH UV Programmer from the App Store; the current app manual covers Export/Share under Groups & Zones.