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
Some people on a project work in Airtable, others only in Google Sheets, and copying records between the two goes wrong sooner or later. This Google Apps Script reads your Airtable base through its official API with your own personal access token and writes the records you choose into a sheet: one table or a view, the fields you need as columns. From Standard it keeps the record ID in each row, so a second run updates rows instead of doubling them, and shows linked records as names. Premium sends edits from the sheet back to Airtable by the rule you set for which side wins. Your token goes into the script's properties, which you fill in, never into the code. It runs at the pace Airtable's API allows; attachments come over as links.
What is included
- What you getA ZIP archive with the Apps Script code and a README that shows how to add it to your sheet, put in your token and run it; the code is also shown on the order page.
- Official APIAirtable's own Web API with your token
- Fields you chooseA table or a view, only the fields you need
- No doublesFrom Standard, rows matched by record ID
- Token out of the codeYou put it into the script's properties
- Readable codeWith comments, easy to add a field later
How it works
- 1TaskYou describe the base, the tables and the direction
- 2CodeWe write the script by Airtable's documentation and the install guide
- 3Try itYou run it on a copy of the base or a test view
- 4ChangesYou ask for changes within your package and send any error message
What we need from you
The Airtable tables or views to sync and a screenshot of their fields with their types (text, number, date, single select, linked record, attachment), the sheet they go to and how the columns should be named and ordered. Which direction you need and, for two-way sync (Premium), which side wins when the same record changes in the two places. How often it should run. Create the personal access token in your Airtable account; never send it to us.
We will ask you:
- What is in the Airtable base?
- Which direction do you need?
- Which fields should come over?
- How often should it run?
Compare packages
| Packages | BasicAirtable to Sheets$16 | StandardSync with settings$33 | PremiumTwo-way sync 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
Is it live, like a real-time sync?
No. It copies when it runs: on a button, or with Premium's guide on a time trigger, for example every 15 minutes. Changes in between show up on the next run.
What happens to attachments and linked records?
Attachments come over as links to the files. Linked records show as names from Standard; in Basic they come as record IDs.
Can edits in the sheet overwrite Airtable?
Only in Premium and only in the fields you allow, by your rule of which side wins. Try it on a copy of the base first.
Do you get access to my base?
No. You create the token and add the script in your own accounts. We work from your screenshots and Airtable's documentation.
Did not find your answer?


