# 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.

- Workflow type: code
- Services: ShipBob, Google Sheets, Slack Bot
- Categories: Operations
- Published: 2026-08-09

## What it does

- 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 you'll need

- 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

## Prompt

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.

## How to customize

- 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

## Example output

Slack, 6:02am: ShipBob snapshot logged. 412 SKUs recorded, 87 orders and 1,240 units shipped yesterday.

Inventory tab:
2026-08-09 | 4471902 | Cedar Candle 8oz | 1,860 | 1,742 | 1,730 | 12
2026-08-09 | 4471903 | Cedar Candle 12oz | 640 | 602 | 602 | 0

Daily Orders tab:
2026-08-08 | 87 | 1,240

## FAQ

### Why do I need this if ShipBob already shows my inventory?

ShipBob shows you where stock stands right now. It does not keep a day by day archive, so there is no way to look back and see what a product's stock looked like six weeks ago. This writes down that position every morning, so the history exists when you need it.

### What does the spreadsheet look like after a few weeks?

One row per product per day, in a fixed column order, plus a daily line with order count and units shipped. Once a few weeks accumulate you can chart any product's stock over time, see how fast it is selling through, and work out when to reorder.

### Will this change anything in my ShipBob account?

No. It only reads inventory levels and order counts. Nothing is created, edited, or cancelled in ShipBob, and nothing is sent to your customers.

### What if I have hundreds of products?

It works through your full catalog page by page rather than stopping at the first batch, so every SKU gets a row. It also paces itself to stay within ShipBob's request limits.

### What happens if a morning run fails?

You still get a Slack message saying the snapshot did not run. A missing day in a history log is easy to miss otherwise, and knowing right away means you can rerun it before the gap matters.

Use this prompt in General Input: https://www.generalinput.com/prompts/build-the-shipbob-inventory-history-shipbob-does-not-keep