Build the ShipBob inventory history ShipBob does not keep
Every morning at 6am, log every SKU's stock position to a spreadsheet so you can chart burn down and see what inventory looked like weeks ago.
Every morning at 6am, snapshot my ShipBob position into a Google Sheets spreadsheet so I build the inventory history that ShipBob itself does not retain. ShipBob's API returns current inventory levels only, so logging a dated snapshot every day is the only way to answer what stock looked like six weeks ago, or to chart burn down and reorder points. Use a daily cron trigger.
Start by calling ShipBob Get All Inventory Levels to read the current position for every item. These 2026-01 inventory endpoints are paginated: the response body carries first, next, prev, and last URLs and accepts a PageSize parameter. Follow the next link until there is no next rather than assuming a single response covers the whole catalog.
Append one dated row per SKU to an Inventory tab using Google Sheets Append Values, in this exact column order: Snapshot Date, Inventory ID, Item Name, On Hand, Fulfillable, Total Sellable, Exception Quantity. Keep that column order fixed on every run so the sheet stays chartable as it accumulates, and write the header row once if the tab is empty. Use the USER_ENTERED input option so dates land as real dates and quantities as real numbers instead of text, which is what makes charts and formulas work later. ShipBob defines total sellable quantity as fulfillable quantity minus total exception quantity, so log all three values as returned rather than recomputing them.
Then call ShipBob Get Orders filtered to the previous calendar day. Orders use page-based pagination with Page and Limit parameters, so walk the pages until a page comes back short or empty. Append a single summary row to a separate Daily Orders tab with Append Values, in this fixed column order: Date, Order Count, Units Shipped. Keep the order summary on its own tab so the per SKU history stays one clean chartable table.
Finish by posting a one line summary to Slack Bot with Send a Message so the team knows the log ran and sees yesterday's volume, for example: ShipBob snapshot logged. 412 SKUs recorded, 87 orders and 1,240 units shipped yesterday.
ShipBob allows 150 requests per minute. If a call returns a 429, honor the x-retry-after response header and retry instead of failing the run. If the inventory read fails outright, still post a Slack line saying the snapshot did not run, because a silent gap in a history log is otherwise invisible until someone needs that date.
Example output
What does this prompt do?
- Every morning at 6am, records one dated row per SKU in a spreadsheet with on hand, fulfillable, total sellable, and exception quantities
- Adds a daily summary row with yesterday's order count and units shipped, so demand sits next to stock in the same log
- Posts a one line recap to your Slack channel so the team knows the log ran and sees yesterday's volume
- Builds the running stock history your fulfillment provider does not store, so you can chart burn down and spot reorder points
What do I need to use this?
- A ShipBob account you can sign in to and generate an access token from
- A Google account and a spreadsheet with two tabs, one for the daily stock rows and one for the order summary
- A Slack workspace and a channel where the daily recap should be posted
How can I customize it?
- Change the 6am run time or timezone, or run it twice a day if stock moves fast
- Pick which Slack channel gets the recap, or send it as a direct message instead
- Add extra columns at the end of the sheet, leaving the existing order untouched so charts built on it keep working
FAQs
Why do I need this if ShipBob already shows my inventory?
What does the spreadsheet look like after a few weeks?
Will this change anything in my ShipBob account?
What if I have hundreds of products?
What happens if a morning run fails?
Related templates
When someone leaves, we check which shared passwords they used in their final months and post a ranked rotation list to your security channel.
Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.
Twice every weekday, the conversations from your social inbox land on the right HubSpot contact timelines, with a Slack recap for sales.
Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.
Every morning, find the addresses that hard bounced or filed a spam complaint, update the matching HubSpot contacts, and post a short Slack recap.
Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.
Stop losing your stock history every night.
Start logging ShipBob snapshots now and have weeks of chartable trend data by next month.