Daily price sync from Google Sheets to Craigslist
Every weekday at 7am ET, push price changes from your Google Sheet inventory to your live Craigslist postings and recap the run in Slack.
Build me an agent workflow that keeps my Craigslist posting prices in lockstep with a Google Sheet inventory. It should run on a cron trigger every weekday at 7:00am America/New_York.
Inputs I will configure: the Google Sheet ID and tab range that holds my inventory (each row has at minimum a Craigslist posting ID column and a current asking price column, plus optional area and category columns), the Slack channel for the recap, and a guardrail percentage for suspicious drops (default 40 percent).
Step 1. Read the inventory rows with Google Sheets Get Values against the configured sheet and range. Parse out posting ID and target price per row.
Step 2. For each row, call Craigslist Get Posting Price to fetch the current live price. If the posting's category does not support pricing (Get Posting Price returns the not-supported signal, or you have already determined the category is unsupported via Get Current Pricing for that area + category), skip the row and record it as skipped with the reason.
Step 3. Compare the sheet's target price to the live price. If they match, record as unchanged and move on. If they differ, decide whether to push the update:
- If the target is a price drop greater than the guardrail percentage (default 40 percent) below the live price, do NOT push. Record it as flagged for human review with both prices and the percent delta.
- Otherwise, call Craigslist Edit Posting Price with the new value. Craigslist money is fixed-point shaped as { amount, currency, exponent }, e.g. $1,000.00 is { amount: 100000, currency: "USD", exponent: 2 }. Convert the sheet's dollar value to that envelope before sending.
Step 4. Treat every Craigslist response as potentially partial. Even on HTTP 200, inspect the response's errors array. If errors is non-empty, record that posting as errored with the message and continue with the next row. Do not abort the whole run on a single bad row.
Step 5. After all rows are processed, send one Slack message with Send a Message to the configured channel that summarizes the run with four labeled groups: Updated (posting ID, old price, new price), Unchanged (count and a few sample IDs), Flagged for review (posting ID, live price, target price, percent drop, reason), and Errors (posting ID and the Craigslist error text). Keep the message scannable so the operator knows exactly where to look.
Guardrails: the sheet is the source of truth for price. Never touch the sheet, only Craigslist. Never push a price for a flagged row, the operator must adjust the sheet and let the next run handle it. Never push the same price that is already live. Make the guardrail percentage and Slack channel easy to change without editing the workflow logic.
Additional information
What does this prompt do?
- Reads your inventory rows from a Google Sheet, where each row pairs a Craigslist posting with the price you want it listed at.
- For every row, checks what is actually live on Craigslist and updates only the postings whose price has drifted from the sheet.
- Holds back drops that look too steep (anything past your guardrail, like more than 40 percent off) so a human can confirm before the price goes live.
- Posts one Slack recap that lists what was updated, what already matched, what was held for review, and any postings that returned errors.
What do I need to use this?
- A Google Sheet of inventory with one row per posting, including a Craigslist posting ID column and a current asking price column.
- A connected Craigslist account that owns the postings you want to keep in sync.
- A Slack workspace and a channel where the morning recap should land.
How can I customize it?
- Change the schedule. The default is weekdays at 7am ET, but you can pick any cadence, including a second run mid-afternoon.
- Tune the safety guardrail. Raise or lower the percentage drop that triggers a human review before the price is pushed live.
- Swap the recap destination. Send the summary to a different Slack channel, a private DM, or split dealer and rental updates into separate threads.
Frequently asked questions
What happens if a row's category does not support pricing on Craigslist?
Will it overwrite a price I just set by hand?
How does the suspicious drop guardrail work?
Can I sync more than just price later?
What if Craigslist returns an error for one posting?
Stop chasing Craigslist prices row by row.
Connect Google Sheets, Craigslist, and Slack once, and Geni keeps your live postings in lockstep with your inventory every morning.