RTLSDR Scanner



Manual (EN) (FR)

Frequently Asked Questions

Screenshot 1

Screenshot 2

Screenshot 3

Screenshot 4

Screenshot 5

Screenshot 6

A cross platform Python frequency scanning GUI for USB TV dongles, using the OsmoSDR rtl-sdr library.

In other words a cheap, simple Spectrum Analyser.

The scanner attempts to overcome the tuner's frequency response by averaging scans from both the positive and negative frequency offsets of the baseband data.

Tested on:

  • Windows 7 (x86 and x64)
  • Ubuntu 12.04 (x86), 12.10 (x64), 13.04 (x64) and 14.04 (x64)
  • OS X Snow Leopard (10.6) and Mountain Lion (10.8)


Download the installer or stand-alone Windows executables from GitHub.

Download the latest source from GitHub.


Installation instructions are here.

The following dependencies are needed:

Linux and Mac users will need to manually install these,  Windows users can use the installer.


A basic manual is available in Portable Document Format.

Quick start

Run 'python -m rtlsdr_scanner'.

To start a scan simple enter the range at the bottom of the window and click 'Start', after a while a plot of signal strengths should be displayed.

'Dwell' controls how long each step is sampled for, longer times will result in more averaging of the signal.

'Continuous update' updates the display on each step. Caution only use this with small scans and low dwell times, otherwise it will become unresponsive.

'Grid' displays a grid on the scan plot.

Auto Calibration

Scans around the frequency specified for the strongest signal and then calculates the error correction of the dongle.

To get the best out of it you really need a continuous signal peak that stands out from the background noise.  If you live near an airport RADAR signals are great for this. Mobile phone signals also work well but you need to know the channel frequencies, making it tricky.  I have had some luck with commercial FM radio but you'll have to set the dwell time to the highest setting to get a usable offset.

Main Window

  • Start - Scan start frequency
  • Stop - Scan stop frequency
  • Mode - Sing or continuous scanning
  • Dwell - Sampling time spent on each step
  • FFT Size - FFT size, greater values result in higher analysis precision (with higher sizes dwell should be increased)
  • Live update - Update the display on each step (caution this can be slow and unpredictable)
  • Grid - Show a grid on the scan
  • Display - Change the plot type

File Menu

  • Open... - Open a saved scan
  • Save As... - Save a scan
  • Export... - Export a scan to a CSV file
  • Properties ... - Scan information

Edit Menu

  • Preferences - Set dongle gain, calibration, Local Oscillator (positive offset for upconverters) and sample bands (see below)

Scan Menu

  • Start - Start a scan
  • Stop - Stop the scan
  • Stop at end - Stop the scan when the current sweep is finished (only in continuous mode)

Tools Menu

  • Compare - Compare two previously saved scans
  • Auto Calibration - Perform a crude calibration of the dongle to a known signal (this should be a continuous, unwavering signal)


Dongles will differ depending on the tuner and circuit that's used, the software allows you to pick the best range that is sampled to give improved results.

Click on View -> Preferences and select the 'Band Offset' for you tuner, next detach the aerial or even better terminate it with a 50 ohm load.  Now click refresh to show the noise floor of the tuner, adjust the offset so the marked bands overlay the flattest areas of the plot and click OK.

I find the following offsets work well (click the offsets for images):

Tuner Offset (kHz)
Elonics E4000 250
Fitipower FC0012 140
Rafael Micro R820T 100

Note the large peak in the middle, this is at 0Hz (i.e. its the DC offset).  On the R820T it is much narrower, this is because it uses an intermediate frequency away from the low frequencies.  In this case the resulting spike is due to the sample length not being infinitely long (imagine taking a complete cycle of a sine wave then chopping the end off, this leaves it unbalanced and its average value is no longer 0, in other words it looks like it has a DC offset), the sample is windowed to reduce this but it's a trade-off between accuracy and frequency response.


Run 'rtlsdr_scan_diag.py', this tests if the correct modules are installed.




Click to view comments

Al's picture


It seems odd that it works from your external drive but not C:. I wonder if it's getting confused with a previous Python install and the libraries are getting copied there instead of the active one.

Try downloading pyparsing and installing it to see if that overcomes your first problem.

The librtlsdr error maybe because the the rtlsdr driver is not in your path, test if it is it by opening a command prompt and type:



I’m retired so I have a lot more time than money. Each test starts with a fresh install of Windows 7.1 Home Premium with all the Microsoft updates available through yesterday. I make an image of a fresh install before I make any changes to Windows. After a failed install I re-image the hard drive boot partition in case the failed install corrupted anything –like the registry. It only takes about 18 minutes to restore to the fresh install state.

When I downloaded pyparsing and tried installing it I got the following error message “The program can’t start because MSVCR.dll is missing from your computer. Try reinstalling the program to fix this problem.” I have no idea what this means but hopefully it will give you a clue. I’ll try to research MSVCR tomorrow and see if I can figure out what to do next.

I experiment with Over-the-Air television antennas/reception and your program is invaluable for looking at relative signal strengths of the various channels so I would really like to get it going. SDR# is great for finding and listening to a lot of the communication signals but lacks RTLSDR Scanner’s wide field of view.

Thank you for all your efforts.

Al's picture


To fix the msvcr.dll problem try installing Microsoft Visual C++ 2010 Service Pack 1.

I now understand what you mean about the drives, I was thinking it was an extra external drive.  It really does sound like the RTLSDR driver directory is not pointed to by the system's PATH variable.  SDR# uses a driver in it's own directory but the 'pyrtlsdr' library, which the software uses, requires the driver to be in the PATH.

rtl_test isn’t installed in the RTLSDR Scanner directory and when I try to run it from a command prompt, I get:
‘rtl_test’ is not recognized as an internal or external command, operable program or batch file.

Al's picture

Hi, It looks like the RTLSDR driver is not in your PATH, the library I use (pyrtlsdr) needs the files to be in a location which your PATH variable points to. Rapid Environment Editor is useful for setting this.


I think I might have confused you about my hard drive setup. I only have one hard drive in the computer at a time. They are in removable caddies partitioned with a 50 GB active ntfs boot partition and a ~139 ntfs data partition.

Today I installed Windows 7 Home Premium from the Microsoft DVD. I did not install any updates in case one of the updates was interfering with your script. RTLSDR Scanner still wouldn’t load.

Next I tried installing pyparsing but it said missing MSVCR71.dll. I downloaded that and put it in the Windows\SysWOW directory and pyparsing installed. Now when I try to run RTLSDR Scanner I get: “Import error: Error loading librtlsdr. Make sure librtlsdr are in your path

Error importing libraries
Press [Return] to exit

Not sure what I can do to help you.





After all the failures over the last several days I reimaged the drive & installed Hauppauge WinTV v7.2.xxx, Adobe Acrobat & Flash, Seagate Disc Wizard v13.0.14387 and RTL#. I couldn’t resist trying it again and low & behold it installed and opened right up. I’m not sure if installing any of the additional programs made the difference or not? Needless to say, I made an image of the working partition and backed it up six ways from Sunday.

Thank you for all your suggestions and trying to help me to get it working. I’ll try some more installs to see if I can figure out a workable procedure.

Al's picture


Glad to hear you're problem is solved, I'm going to update the installer soon to help with these problems.

Hey Al,

do you think it's hard to optimize the RTLSDR-Scanner for the funcube dongle pro plus?

Your App is the best Command-Line tool i was able to find for those DVBT-Dongles but I would need it to work with the FCDPP, because that dongle has much more power...

Best regards


Al's picture

Hi Marcus,

I have wondered about this and it shouldn't be too hard to implement it from what I've read about the FCDPP.

At the moment my priority is to fix existing bugs and extend the functionality, although if someone sends me one I probably won't be able to resist using it with this project!

The only problem I can think of is the name 'RTLSDR Scanner'!

What do you think how long it would take?

Where should I send the fcdpp? :D

Al's picture

Hi Marcus,
I don't want to get your hopes up, at the moment my priority is to fix bugs and add a few more features before I start adding support for the FCD.

I've been using your scanner to watch Solar and Jovian Radio burst activity.
I thought I'd show a timelapse of it in action. I havent caught anything yet but it's interesting to watch. =)

Al's picture

Hi Kevin,

Thanks for the video and good luck hunting those elusive signals!


As I reported earlier, I ran into a problem getting your RTLSDR Scanner software to work with Windows 7 following a fresh install. After countless re-installs, I discovered that I needed to install the 32 bit version of “Microsoft Visual C++ Redistributable (x86) {vcredist_x86.exe}”. You suggested installing Microsoft Visual C++ but since all my Windows 7 computers are 64 bit I was installing the 64 bit version and that didn’t seem to work. Three computers with fresh installs of Windows 7 setup flawlessly by first installing the 32 bit version of Microsoft Visual C++ Redistributable (x86). I hope this information helps.

Al's picture


Sorry, I forgot to say it was the 32 bit version. The installer uses the 32 bit versions of Python and it supporting libraries even on 64 bit systems.

I just checked out a fresh version from Github and ran 'python rtlsdr_scan.py' which threw this error:

RTLSDR Scanner

libusb: 0.000000 warning [init_device] could not get node connection information for device '\\.\USB
#VID_0000&PID_0000#6&3A6A7FD9&0&3': [87] Parameteren er feil
Traceback (most recent call last):
File "G:\gv\dx-radio\RTLSDR-Scan\src\rtlsdr_scan.py", line 107, in
frame = FrameMain("RTLSDR Scanner", pool)
File "G:\gv\dx-radio\RTLSDR-Scan\src\main_window.py", line 160, in __init__
File "G:\gv\dx-radio\RTLSDR-Scan\src\main_window.py", line 178, in create_widgets
self.graph = PanelGraph(panel, self, self.settings, self.on_motion)
File "G:\gv\dx-radio\RTLSDR-Scan\src\windows.py", line 118, in __init__
self.measureTable = PanelMeasure(self)
File "G:\gv\dx-radio\RTLSDR-Scan\src\windows.py", line 546, in __init__
File "G:\gv\dx-radio\RTLSDR-Scan\src\windows.py", line 634, in set_descs
self.grid.SetCellValue(row, col, desc)
File "g:\Programfiler\Python27\lib\site-packages\wx-2.8-msw-ansi\wx\grid.py", line 1880, in SetCel
return _grid.Grid_SetCellValue(*args, **kwargs)
File "g:\Programfiler\Python27\lib\encodings\cp1252.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode character u'\u0394' in position 5: character maps t

I have no idea what this is? It used to work fine. I still use Python 2.7.5.

Al's picture

It seemed to be a problem with the 'delta' symbol (Δ). I've pushed an update which changes it to the word 'delta' so you shouldn't have any problems now.

I'm unable to install the Python version of RTLSDR Scanner (I've tried for hours to work around the problems). I found a Windows executable from 2013-09-05, but it's missing most of the features. Any chance of an update?


Al's picture

Unfortunately not, but when PyInstaller 2.1.1 is released I hope to start building the executables again.

Hi, i just installed the windows version from today (the big 5M installer), and the main program does not run. Now i habe a huge 165MB directory C:\Python27, all libraries installed and the installer reported no problems at exit.
Paths are set.

C:\Users\XY>python "c:\sdr\rtlsdr scanner\rtlsdr_scan_diag.py"

Tests for missing libraries

matplotlib not found
Download from 'http://matplotlib.org/downloads.html'

Problems found, please install the libraries for Python 2.7

Press [Return]
C:\Users\XY>python "c:\sdr\rtlsdr scanner\rtlsdr_scan.py"
Import error: matplotlib requires pyparsing

Error importing libraries
Press [Return] to exit

I downloaded mathplotlib and installed it (was already there), but no changes.
What did i wrong??

There is a separate discussion area (or whatever) on the Windows installer. Click on "Recent Posts" -> "RTLSDR Scanner Installer" in the thing that's on the right-hand side of the page. I have recently won a battle to install this program and you may learn something from my experience. Don't give up. This is a great program.

Thanks a lot, it works excellent now, what an improvement compared to the last working compiled .exe version! It works a bit faster, too.
Problem was the missing msvcr71.dll as you explained, adding it to system32, the scaner-installer fetched and installed pyparsing, too.

Hi, I want to know what is the meaning of the dB result shown on graph, is it Signal to Noise Ratio (SNR) or it is the signal level compared to 1watt?

Al's picture

Hi Rami,

The level scale is only relative not absolute, therefore it's only useful when comparing signals.

I'm using 07/05/2014 version. But there is not data after 696 MHz. I found this as I couldn't get L band data. SDR is 820T based one.Pls check the screenshot,


Al's picture

Hi Buddika,
Are you still getting this problem, I've tried but it works for me. Have you tried tuning to this frequency using SDR#?

First, thank you for a great low cost scanner. It really works well on Windows 8.1. I install the software about a week ago without difficulty.
The GUI scanner puts a "Location = {}" at the end of the rfs data and the plot works normally. However, using the command line interface, the "Location = null" is placed. The problem is that no plot is produced with "Location = null". Other than manually editing the rfs fie, is there a way to fix the problem?
A program written in Delphi is used to generate the required command line script. Basically CMD.exe with a "/" is executed to access the command window. The "/" permits an argument to be passed to the command window.

Thank you

Al's picture

Hi Rob,
Glad you like the scanner and thank you for bringing the bug to my attention. I've just uploaded a fix which should fix the CLI scanning.

Hello Al,
Thank you for your command line interface fix; it works great! I use the command line interface with a Delphi project which finds ATSC start and end frequencies and passes the arguments to the Windows command prompt. The Delphi project is Windows based and uses the CDBS FCC data base for TV stations. I also use the same CDBS data base to predict the received signal strength using the Longly-Rice irregular terrain method. Interesting to compare the actual (even if not calibrated) against the predicted value.

Hi Al,
would it be possible to extend the dynamic range from about 50dB to about 70dB by doing three passes in 10dB-steps (or configurable) of LNA amplification and set together the data?
I am analysing the TV-band; at 0dB the strong signals are well under clipping and the weak signals not visible in the noise floor, at around 10dB the strong signals are clipping and the weak ones just visible and at 20dB the medium ones clipping and the weak ones very good visible and additionally the amplified noise can be seen.
Therefore a three pass measurement would give all the information in one result curve.
Thanks, Martin.

For me is working both on OsX 10.8.5 and Win XP.
If you can create an export .csv that be imported in the SHURE Wireless Workbench 6, you became an HERO!

Al's picture

Hi, I'll take a look at it and see if I can do anything

Al's picture

I've just updated the code so you can export '.sdb2' files to Wireless Workbench (File -> Export scan... -> Wireless Workbench).
Hope it helps.

Hey Thank you for making this app and INCLUDING THIS AWESOME FEATURE!

I've been stumped however, the noise floor seems to be stuck at -50, if I could get it down to like -100 it would play nicer in wireless workbench when i export scans. I have the rtlsdr 2832u. any help you could give me would be awesome. I'm currently bootstrapping it on a mac with xwindows. thanks a ton for all the hard work!

Al's picture

Thank you!

I'm thinking about adding an offset setting when you export it to make it easier to match the levels.

Al's picture

I've added an option in Edit->Radio devices which allows you to set an offset in decibels which might help you adjust the levels.

I'm not sure how much this will help you as the RTLSDR devices have a much lower dynamic range than the Shure ones. This will mean that if you bring the noise floor down the peak level will be reduced and vice versa.

one more question…i've installed it in Osx, i have to run the terminal every time i wan to start the scanner application?

Al's picture

Try something like this, I'll look into making it easier.

Hi Al
I have always the same problem:
Reset pc to factory settings (xp sp3)
Install with installer. It stops 'can't find python', abort.(seems it's looking for python before installing it)
I manually install python
Restart installer, all ok.
When i click on -edit-radio devices i can see another 'found rafael micro etc' line on the dos window, then a windows
error appears: Python.exe error.
And all close.
Can you pls help? I would like to use your software, but can't understand what it needs.
Thank you very much

Al's picture

Thanks for the information about the installer, I'll try and get that fixed soon.

Have you tried 'Edit -> Reset settings' from the main menu? Removing the dongle may have left the configuration in a mess.

I've tried reset settings as suggested, it works but the problem is not solved.
any other choice of the edit menu gives the second 'found rafael....' line on dos window then windows error
' python.exe error' and all close.
Can you pls provide a list of system requirements, hw and sw (all what needed but not installed by the installer)
Thank you

Al's picture


The installer should provide everything you need except for running zadig.
As for hardware you can just about use any machine, 32 bit Python can't use more than 2GB of RAM and you need a USB 2.0 port for the dongle.

Unfortunately the 'python.exe error' is a strange one as usually if an error occurs Python will give a trace showing what the error was and where it occurred.  I'll keep looking into the problem an see if I can fix it.

Al's picture

Hi max,

It looks like the problem is with wxPython 3.0.0 on XP, if you uninstall this and use wxPython instead it should work.


VERY GOOD! now it works. Thank you for your time, you are the best!!!

Sigh, when i try to set the value in 'LO' for my convrter, (50) i obtain this error:
File "C:\programmi\RTLSDR scanner\dialogs.py", line 1740, in_dev_get_grid
device.lo = float(self.griddev.getcellvalue(i, self .COL_LO))
valueerror: invalid literal for float():50,000
Pls help me!
Thank you

Al's picture

Hi max,

Glad I could fix the python.exe error and I've just updated the code which should fix the error with the local oscillator offset.

YES, it works fine!!
Thank you very much.

Everything was working now I get this error on startup. I have uninstalled and reinstalled twice now.

Traceback (most recent call last):
File "C:\Program Files (x86)\RTLSDR Scanner\rtlsdr_scan.py", line 116, in
frame = FrameMain("RTLSDR Scanner", pool)
File "C:\Program Files (x86)\RTLSDR Scanner\main_window.py", line 180, in __init__
File "C:\Program Files (x86)\RTLSDR Scanner\main_window.py", line 206, in __create_widgets
File "C:\Program Files (x86)\RTLSDR Scanner\panels.py", line 96, in __init__
File "C:\Program Files (x86)\RTLSDR Scanner\panels.py", line 190, in create_plot
File "C:\Program Files (x86)\RTLSDR Scanner\panels.py", line 243, in set_plot_title
gain = self.settings.devicesRtl[self.settings.indexRtl].gain
IndexError: list index out of range


Al's picture

Thanks for the info, I've just updated the code to fix this problem.


Click to add a comment