DevelopmentPayment protectionDetails
- Revisions within the package are free.
- If you do not respond within 3 days of delivery, the work is accepted automatically.
The money is reserved when you pay and released only once you accept the work.

Example result
Merging the monthly sales files of 9 shops into one Excel report
How it is run
python merge_sales.py --month 2026-10
2026-11-02 09:14:03 INFO Folder: sales/2026-10, 9 files found
2026-11-02 09:14:03 INFO shop-01.csv: 1,284 rows
2026-11-02 09:14:04 INFO shop-02.xlsx: 967 rows
2026-11-02 09:14:04 WARN shop-07.csv: 3 rows without a price skipped (lines 88, 412, 913)
2026-11-02 09:14:05 INFO Done: 10,412 rows -> report-2026-10.xlsx (sheets "Sales" and "Totals")
Settings, not code
The column names of each shop live in settings.ini, so a new shop or a renamed column is a line there:
[columns]
date = Date, Sale date, Day
product = Product, Item, Name
quantity = Qty, Quantity, Pcs
price = Price, Unit price
A part of the code
def read_shop_file(path: Path, columns: dict[str, list[str]]) -> pd.DataFrame:
"""Reads one shop's file and gives it the report's column names."""
table = pd.read_excel(path) if path.suffix == ".xlsx" else pd.read_csv(path, encoding="utf-8-sig")
renamed = {}
for name, variants in columns.items():
found = next((c for c in table.columns if c.strip() in variants), None)
if found is None:
raise ReportError(f"{path.name}: no column for '{name}' (looked for {', '.join(variants)})")
renamed[found] = name
table = table.rename(columns=renamed)[list(columns)]
table["shop"] = path.stem
return table
Files: a ZIP archive with merge_sales.py (310 lines), settings.ini, requirements.txt and a README with installing Python, running the script and what each message in the log means. The client runs it on their own computer.
Client: a small chain of 9 stationery shops; each shop sends its sales for the month as a CSV or Excel file, with slightly different column names. Task: one script that reads every file in a folder, brings the columns to one shape, and writes a single Excel report with all sales and a sheet of totals by shop.
The client and all details are made up.
About this service
Table cards for a restaurant, labels for stock or equipment, tickets, product tags, codes for every page of a catalogue: when you need hundreds of QR codes, making them one by one on a website takes forever. This Python script reads your list (CSV or Excel) and makes a QR code for every row: a link, a text, a contact card or Wi-Fi details, saved as PNG for screens or SVG for print, named after a column such as the table number or SKU. From Standard it adds a caption and checks that each code reads back; Premium lays them out on a PDF sheet of labels. These are static codes: the link sits inside the code, so it cannot be changed after printing and scans are not counted. Test-scan a few before printing many.
What is included
- What you getA ZIP archive with the Python script, a README with step-by-step instructions and, from Standard, a settings file with size, colours and captions; the code is also shown on the order page.
- A code per rowLinks, texts, contact cards or Wi-Fi details
- For screen or printPNG in the size you set, or SVG that scales
- Named your wayFiles named after a column of your list
- Read-back checkFrom Standard, each code is decoded to make sure it matches
- Readable codeWith comments, easy to change the look later
How it works
- 1ListYou send a sample of the list and how the codes will be used
- 2CodeWe write the script and the guide to running it
- 3Try itYou make codes for a few rows and scan them with your phone
- 4ChangesYou ask for changes within your package and send any error message
What we need from you
10-20 rows of your list as CSV or Excel, which column goes into the code and which gives the file name or caption, and where the codes will be used: screen, sticker, card or sign, with the printed size if you know it. Colours if not black on white, your logo as PNG or SVG for Premium, and the label sheet layout (paper size, codes per row and column). Your system: Windows, macOS or Linux.
We will ask you:
- What are the codes for?
- What goes into each code?
- Screen or print, and what size?
Compare packages
| Packages | BasicCodes from a list$16 | StandardCodes with settings$33 | PremiumQR tool$67 |
|---|---|---|---|
| Deadline | 1 day | 2 days | 3 days |
| Revisions | 1 | 2 | 3 |
| Code | up to 150 lines | up to 400 lines | up to 1,000 lines |
| Files of code | 1 | up to 3 | up to 8 |
| Settings file | No | Yes | Yes |
| Clear error messages and a log | No | Yes | Yes |
| Run options and a guide to running it on a schedule | No | No | Yes |
| Guide to installing and running it (README) | Yes | Yes | Yes |
| Language | Python | Python | Python |
| Order Basic | Order Standard | Order Premium |
Payment protection
You pay when you order, but the money is released only for accepted work.
- Fixed priceThe package price does not change after you pay.
- The money is reservedWhen you pay, the amount is only reserved. It is released to the service once you accept the work.
- Checked before deliveryEvery result goes through a quality check before it reaches you, and you see it on the order page before accepting it.
- Free revisionsAsk for changes within your brief as many times as the package allows.
- Acceptance after 3 daysIf within 3 days of delivery you neither accept the work nor ask for changes, it is accepted automatically. If you write in the order chat after delivery, the order waits; once we answer, we may start the 3 days again and will say so in the chat.
- Redo or a full refundIf the result does not match your brief and the revisions did not fix it, or the work takes more than twice its deadline, write in the order chat: we will redo the work or refund the payment in full.
Questions and answers
Can I change where a code leads after printing?
Not with these codes: the address is inside the code itself. If you may need to change it, point the codes to pages on your own site that you can redirect later.
Can it count how many people scanned a code?
No, counting needs a server between the code and the page, which this script does not have. You can add UTM tags to your links and see the visits in your site's analytics.
Is a logo in the middle safe?
A small logo works when the code uses high error correction, which Premium sets. The read-back check and a test scan with your phone tell you for sure.
How many codes can it make?
As many as there are rows; thousands take a minute or two on an ordinary computer.
Did not find your answer?


