UtilityEXE
Bulk QR Code Generator logo

Bulk QR Code Generator

Bulk QR codes from Excel and CSV, without uploading your data anywhere

Free Open source Portable Windows 10 & 11
Download v1.0.0 View source on GitHub

49.3 MB · EXE · 1 downloads
Updated 20 Aug 2026

Screenshots

Bulk QR Code Generator

What it does

Single QR generator

Create individual codes from text, URL, phone, email, SMS, WhatsApp, WiFi or UPI data with a live preview that updates as you type.

Structured content builder

Fill in normal fields and the app writes the exact payload syntax a scanner expects for WiFi, UPI, mailto, smsto and wa.me links.

Bulk generation from spreadsheets

Read .xlsx, .xlsm, .csv and .tsv files and produce one QR code per row, from a handful to many thousands.

Drag and drop input

Drop a spreadsheet straight onto the window or browse for it; columns are detected automatically and the first rows shown as a preview.

Multi-column QR content

Tick any combination of your own columns, reorder them, and combine them into a single code instead of being limited to one field.

Choice of separators

Join combined columns with a pipe, dash, comma, space, new line, slash, colon, underscore or your own custom text.

Field names on or off

Encode values only, or include labels so the scanned result reads Name: Apu Patra | Dob: 05-01-1920 instead of bare values.

Renameable field labels

Override any column heading for the encoded output, so a column called dob can appear as Date of Birth.

Live row preview

See the exact encoded string built from your first row, updating as you change columns, separators or labels, before generating anything.

File names from your data

Pick a column for output file names, or add a qrname column so Student001 becomes Student001.png.

Automatic numbering fallback

With no name column present, files are numbered sequentially as QR000001, QR000002, QR000003 and onward.

Safe file name handling

Illegal characters are replaced with underscores and duplicate names are suffixed rather than overwritten.

Row validation

Blank rows are ignored and rows with empty QR data are skipped and written to the log instead of silently failing.

Multithreaded engine

Generation runs on a thread pool off the interface thread, so the window stays responsive through long runs.

Detailed progress window

Progress bar, elapsed time, remaining time, estimated completion, completed and failed counters, current file and a Cancel button.

Run summary

An end-of-run summary with an Open Output Folder button so you go straight to the results.

PNG, JPG and SVG output

Export as raster or as true vector SVG that stays sharp at any print size, from business card to banner.

Full size control

Any size from 64 to 4096 pixels, with 256, 512 and 1024 as one-click presets, plus an adjustable quiet-zone margin.

Error correction levels

Choose L, M, Q or H to balance data capacity against how much damage or obstruction a code can survive.

Custom colours

Separate foreground and background colour pickers for both single and bulk output.

Reusable templates

Five built-in presets plus your own saved settings, applied to either the single or the bulk generator.

Run history

Every run recorded with date, source file, count, output folder and status, viewable inside the app.

Daily log files

Per-day logs listing errors, skipped rows and completed rows for anything you need to trace afterwards.

Light and dark theme

Both themes included and remembered between sessions, switchable with Ctrl+T.

Settings that persist

Last output folder and last QR options restored on next launch from a local config file.

Responsive layout

Fits a 1366x768 screen without scrolling; the sidebar collapses to an icon rail on narrow windows and expands on wide ones.

Keyboard shortcuts

Ctrl+N, Ctrl+O, Ctrl+S, Ctrl+Shift+G, Ctrl+T, F1, F11 and Ctrl+Q cover every common action.

Unicode support

Bengali, Hindi, Arabic, emoji and any other Unicode text encode correctly.

Fully offline

No upload, no account, no analytics and no network calls; your spreadsheet never leaves your computer.

Portable, no installer

Extract the zip and run it. No admin rights, no registry writes; delete the folder to uninstall.

No watermarks or limits

Free to use with no per-day cap, no export restriction and nothing stamped on your codes.

Most QR code tools are websites. That means every phone number, payment ID, WiFi password or customer record you turn into a QR code is uploaded to somebody else's server first. For a single link that may not matter. For a spreadsheet of five thousand employees, it does.

QR Code Generator is a desktop application. Your file never leaves your computer, and the app works the same whether you are online or not.

Single codes

The single generator handles plain text, URLs, phone numbers, email addresses, SMS, WhatsApp links, WiFi credentials and UPI payment strings. Each of these has a specific payload format that has to be written exactly right or the scanning phone will treat it as plain text — a WiFi code needs the WIFI:T:WPA;S:name;P:password;; structure, a WhatsApp link needs the wa.me form, an SMS needs smsto:. The built-in content builder writes these for you, so you fill in normal fields and the app produces the correct string.

Unicode text is supported, so Bengali, Hindi, Arabic and emoji all encode correctly.

The preview refreshes as you type and shows the file name, image dimensions, the encoded data, the output format and a timestamp, so you can confirm what is actually going into the code before you save it.

Bulk codes

Drag an .xlsx, .xlsm, .csv or .tsv file onto the app, or browse for it. Every column is detected automatically and the first rows are shown as a preview.

Where this app differs from most bulk generators is what goes into each code. Instead of picking one column, you can tick any combination of columns, drag them into the order you want, and join them with a separator of your choice — pipe, dash, comma, space, new line, slash, colon, underscore or your own custom text.

You then decide whether field names are encoded along with the values. The same three columns can produce either:

Apu Patra | Biswanath Patra | 05-01-1920

or:

Name: Apu Patra | Father Name: Biswanath Patra | Dob: 05-01-1920

Field names default to your column headings and can be renamed individually, so a header written as "dob" can appear in the code as "Date of Birth". A live preview built from your first row updates as you change any of this, which means you see the exact encoded string before generating five thousand of them.

Output file names come from a column you select. Add a column named qrname and Student001 becomes Student001.png. If that column is absent, files are numbered QR000001, QR000002 and so on. Illegal file name characters are replaced with underscores, blank rows are ignored, rows with empty data are skipped and written to the log, and duplicate names are suffixed rather than overwritten — Student001.png, Student001_1.png, Student001_2.png.

Generation is multithreaded and runs off the interface thread, so the window never freezes mid-run. A progress window opens as soon as the run starts, showing a progress bar, elapsed time, remaining time, estimated completion, completed and failed counters and the file currently being written, with a Cancel button throughout. When the run finishes you get a summary and an Open Output Folder button.

Output control

Size is adjustable from 64 to 4096 pixels, with 256, 512 and 1024 available as presets. Margin is adjustable, error correction can be set to L, M, Q or H, and foreground and background colours are both selectable.

Three formats are available: PNG, JPG, and SVG as true vector output rather than a bitmap wrapped in an SVG tag. Vector output matters for print — a QR code placed on a banner, a product label or a business card stays sharp at any size.

Every one of these settings applies to bulk runs as well, and can be saved as a template. Five presets are built in, and you can add your own.

Working with it day to day

The app opens maximized, remembers your last output folder and last QR settings, and restores your light or dark theme between sessions. The layout fits a 1366x768 screen without scrolling; on narrow windows the sidebar collapses to an icon rail and expands again when you widen it.

Every run is recorded in a history page with date, source file, count, output folder and status. Daily log files are written to a logs folder, listing errors, skipped rows and completed rows, and the history page shows them without leaving the app.

Keyboard shortcuts cover the common actions: Ctrl+N to clear the single form, Ctrl+O to open a spreadsheet, Ctrl+S to save the current code, Ctrl+Shift+G to start a bulk run, Ctrl+T to switch theme, F11 for full screen and F1 for help.

What it doesn't do

Being clear about the limits is more useful than a longer feature list.

It does not read old .xls files. Excel's pre-2007 binary format is not supported — save as .xlsx or export to CSV first.

It does not encode unlimited content. A QR code has a fixed capacity that shrinks as error correction rises. If you see "Content is too long for a single QR code", shorten the text or drop error correction to L or M.

It does not read QR codes. This is a generator only, not a scanner or decoder.

It does not guarantee that heavily customised codes will scan. You can set any foreground and background colour, but low contrast or a very small margin will defeat some scanners. Keep the margin at 2 to 4 and the contrast strong.

It does not produce codes with embedded logos.

It does not run on macOS or Linux, and it is not signed. Because it is a single-file PyInstaller build, SmartScreen or your antivirus may flag it on first run. Choose More info, then Run anyway, or add an exclusion.

It does not track you. No analytics, no account, no network calls of any kind.

Requirements and licence

Windows 10 or 11, 64-bit. No Python installation and no runtime needed — extract the zip and run the executable. There is no installer and no registry writes; to remove it, delete the folder.

Built with Python 3.12 and PySide6. Third-party components: PySide6 (LGPL v3), qrcode (BSD), Pillow (MIT-CMU), openpyxl (MIT).

Version history

v1.0.0 Current
7 Aug 2026 · 49.3 MB

Questions about Bulk QR Code Generator

Q: Is QR Code Generator free?
A: Yes. It is free to download and use with no trial period, no per-day limit on how many codes you generate, and no watermark on any output.
Q: Does my spreadsheet get uploaded anywhere?
A: No. The application does not make network calls of any kind. Your file is read from disk, the codes are generated on your machine, and the images are written to a folder you choose.
Q: How many QR codes can I generate at once?
A: There is no built-in cap. Generation is multithreaded and shows live progress with a cancel option, so large runs are practical. The realistic limit is your file size, chosen image size and disk space.
Q: What file formats can it read?
A: Excel .xlsx and .xlsm files, plus .csv and .tsv text files. The old .xls binary format is not supported — save as .xlsx or export to CSV first.
Q: Can I put more than one column into a single QR code?
A: Yes. Click the QR Data Column button, tick any combination of columns, reorder them, and pick a separator. You can also choose whether field labels are encoded with the values, and rename any label.
Q: How are the output files named?
A: You choose a column for the names. Add a column called qrname and a row containing Student001 produces Student001.png. Without a name column, files are numbered QR000001 onward.
Q: What happens if two rows have the same name?
A: Nothing is overwritten. Duplicates are numbered — Student001.png, then Student001_1.png, then Student001_2.png.
Q: What if a row is empty?
A: Blank rows are ignored, and rows with a name but no QR data are skipped and recorded in the day's log file so you can find them afterwards.
Q: Which output formats are available?
A: PNG, JPG and SVG. The SVG output is true vector, not a bitmap in an SVG wrapper, so it stays sharp at any print size.
Q: Can I make QR codes for WiFi and UPI payments?
A: Yes. The content builder writes the correct payload for WiFi, UPI, email, SMS and WhatsApp so the scanning phone recognises the code as that type rather than as plain text.
Q: Can I change the colours?
A: Yes, foreground and background are both adjustable for single and bulk output. Keep strong contrast and a margin of 2 to 4, or some scanners will struggle.
Q: What does error correction do?
A: Higher levels let a code still scan when part of it is dirty, torn or covered, but they use up capacity, so less text fits. L holds the most data, H survives the most damage.
Q: I get an error saying the content is too long. What now?
A: A QR code has a fixed capacity. Shorten the text, or lower error correction to L or M to free up space.
Q: Can it read or decode QR codes?
A: No. This is a generator only. It creates codes, it does not scan or decode them.
Q: Can it add a logo in the middle of the code?
A: No. Logo embedding is not supported in this version.
Q: Does it work without an internet connection?
A: Completely. Nothing about the app requires a connection, at first run or afterwards.
Q: Does it need Python installed?
A: No. The download is a standalone executable with everything bundled. Python is only needed if you want to run it from source.
Q: Why does Windows warn me when I run it?
A: The build is not code-signed, and SmartScreen warns about unsigned executables it has not seen before. Choose More info, then Run anyway. Some antivirus tools flag single-file PyInstaller builds for the same reason; add an exclusion if needed.
Q: Is there an installer?
A: No. Extract the zip and run the executable. It needs no admin rights and writes nothing to the registry. To uninstall, delete the folder.
Q: Does it run on macOS or Linux?
A: No, this build is Windows 10 and 11, 64-bit only. The source is Python and PySide6, so it can be run from source on other platforms, but no build is provided.
Q: Does it support Bengali or other non-English text?
A: Yes. Any Unicode text encodes correctly, including Bengali, Hindi, Arabic and emoji.
Q: Where are my settings and logs kept?
A: In config and logs folders next to the executable. Settings are restored on next launch, and logs are written one file per day.

Similar tools

Other utilities people use alongside Bulk QR Code Generator.