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.

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
Google Forms can tell you that a new answer arrived, but not what it says, and not to the colleague who handles that city or service. This Google Apps Script runs each time someone submits your form and sends an email with the answers laid out clearly: the questions in bold, the answers under them and a link to the response sheet. From Standard it chooses who gets the email by an answer, such as sending London requests to one address and Paris requests to another. Premium can send the person who filled the form a confirmation, if the form asks for their email, and a daily summary to you. Emails go from your own Google account, within the daily limit Google sets. You install it in your account.
What is included
- What you getA ZIP archive with the Apps Script code and a README that shows how to add it to your form, allow access and set the trigger; the code is also shown on the order page.
- The whole answerEvery question and answer in the email itself
- A clear subjecte.g. New request: Name, Service
- To the right personFrom Standard, the address chosen by an answer
- From your accountSent from your Google account, within Google's limits
- Readable codeWith comments, easy to change the email later
How it works
- 1TaskYou send the form's questions and who should get what
- 2CodeWe write the script and the guide to installing it
- 3Try itYou add it to a copy of the form and send a test answer
- 4ChangesYou ask for changes within your package and send any error message
What we need from you
The questions of your form (a screenshot or the list), the addresses that should get the alerts and, from Standard, the rule for who gets what, such as by city or service. The subject and any text you want in the email. For a confirmation to the person who filled the form (Premium), the text of that email and the question that asks for their address. Whether your form saves answers to a Google Sheet.
We will ask you:
- What is the form for?
- Who should get the alerts?
- What should the email look like?
- Anything else to send?
Compare packages
| Packages | BasicOne alert$16 | StandardAlerts with settings$33 | PremiumAlerts 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 | Google Apps Script | Google Apps Script | Google Apps Script |
| 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 it send the person a confirmation?
In Premium, yes, if your form asks for their email address. The email goes from your Google account, so it reads like any email from you.
Will it work if the form is in someone else's account?
The script has to be added by an editor of the form, and emails then go from that person's account. The README shows the steps.
Can it send a text message or a chat message instead?
This offer sends emails. A message to a service with a public API, such as a Slack channel through its incoming webhook, can be added within your package if you set up that webhook yourself.
Do you get access to my form?
No. You add the code yourself and allow it access in your own account. A screenshot of the questions is all we need.
Did not find your answer?