Status and redirect checkDevelopment & Customization

A Python script that checks a list of addresses for status codes and redirects, hop by hop

Usually ready in 15 minutesRevisions includedQuality check
Packages
Payment 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.

A Python script that checks a list of addresses for status codes and redirects, hop by hop

Example result

Example for the Standard package

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

After moving a site, changing its addresses or switching to https, old links must lead to the right new pages, and checking hundreds of them in a browser is slow. This Python script reads your list of addresses (CSV, Excel or text) and checks each one: the status code (200, 301, 404, 500), the final address it ends at and, from Standard, every step of the redirect chain. If you add a column with the address each one should lead to, it marks every mismatch. Premium flags loops and chains longer than you allow. It reads only open pages, at a polite pace you set, and never logs in. You run it on your computer and fix the redirects in your site's settings yourself; it only reports what it sees.

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 pace and timeouts; the code is also shown on the order page.
  • Status of each address200, 301, 302, 404, 500 and the rest
  • Every redirect hopFrom Standard, the full chain to the final page
  • Expected target checkMismatches marked when you give the address it should reach
  • Polite paceA pause between requests you set
  • Readable codeWith comments, easy to add a column later

How it works

  1. 1
    TaskYou send a sample of your address list
  2. 2
    CodeWe write the script and the guide to running it
  3. 3
    Try itYou run it on part of the list, then on all of it
  4. 4
    ChangesYou ask for changes within your package and send any error message

What we need from you

A sample of your list: 10-20 addresses as CSV, Excel or text and, if you have it, the column with the address each one should lead to (a redirect map from your move). Roughly how many addresses there are in all and whether they are on your site or several sites. How fast it may go, which report you want (CSV or Excel) and your system: Windows, macOS or Linux.

We will ask you:

  • What is the list for?
  • Do you have the addresses they should lead to?
  • Which report do you need?
  • Where will it run?

Compare packages

PackagesBasicStatus of a list$16StandardRedirect check with settings$33PremiumRedirect tool$67
Deadline1 day2 days3 days
Revisions123
Codeup to 150 linesup to 400 linesup to 1,000 lines
Files of code1up to 3up to 8
Settings fileNoYesYes
Clear error messages and a logNoYesYes
Run options and a guide to running it on a scheduleNoNoYes
Guide to installing and running it (README)YesYesYes
LanguagePythonPythonPython
Order BasicOrder StandardOrder 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.
How it works →

Questions and answers

Can it check a site move?

Yes, that is its main use. Give it the old addresses and the new address each should reach, and it marks every one that ends somewhere else, gives an error or takes too many steps.

Will it set up the redirects for me?

No. It only checks. Redirects are set in your site's platform, a plugin or the server's settings, and you make those changes yourself.

Why does a page show 403 when it works in my browser?

Some sites refuse requests that do not come from a browser. Such results are marked for you to check by hand; the script does not try to get around the block.

How many addresses can it check?

As many as you have; the pace sets the time. At one address a second, 3,600 addresses take about an hour.

Did not find your answer?

Packages