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
Links that lead nowhere annoy visitors and make a site look neglected: old blog posts pointing to pages you removed, product links after a catalogue change, partner sites that closed. This Python script starts at your home page, follows your site's own links page by page and checks every link and, from Standard, every picture it finds. It saves a list of the broken ones with the error, the page where each sits and the link text, so you know what to fix and where. It reads only open pages, at a polite pace you set, and never logs in. Links that pages add with JavaScript after loading may be missed. It is meant for your own site. You run it on your computer and fix the links yourself.
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 the start page, limits and pace; the code is also shown on the order page.
- Where each link sitsThe page, the link text and the error
- Internal and outgoingLinks to your pages and to other sites
- Polite paceA pause between requests you set
- Open pages onlyNo logging in, no getting around protection
- Readable codeWith comments, easy to change limits later
How it works
- 1TaskYou give the site address and what to check
- 2CodeWe write the script and the guide to running it
- 3Try itYou run it with a small page limit first, then on the whole site
- 4ChangesYou ask for changes within your package and send any error message
What we need from you
The address of your site, roughly how many pages it has and any sections to leave out (search results, filters, the cart, admin pages). Whether to check pictures and links to other sites as well as your own pages. How fast it may go: one page a second is a polite default. The report format you prefer (CSV or Excel) and your system: Windows, macOS or Linux.
We will ask you:
- What is your site's address?
- What should it check?
- Anything to leave out?
- Where will it run?
Compare packages
| Packages | BasicLinks on a list of pages$16 | StandardSite walk with settings$33 | PremiumLink checking 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 check someone else's site?
The script is made for your own site. Checking a list of your outgoing links to other sites is part of it, but walking through someone else's whole site is not what it is for.
Why are some working links in the report?
Some sites answer scripts with an error or a block even when the page opens fine in a browser. Such links are marked separately so you can check them by hand.
Will it slow my site down?
Not at a polite pace: by default it asks for one page a second, which is lighter than a single visitor clicking around quickly. You can slow it further in the settings.
Will it fix the links?
No. It gives you the list of what is broken and where; you fix the links in your site's editor. We never log in to your site.
Did not find your answer?


