---
title: "Stock History Developer Reference: Hooks, Filters and Data"
description: "Actions, filters, Action Scheduler hooks, shortcode and snapshot data format in Stock History & Reports Manager for WooCommerce."
url: "https://wpfactory.com/docs/stock-history-developers/"
updated: "2026-10-05"
category: Developers
---

# Stock History Developer Reference: Hooks, Filters and Data

This developer reference for [Stock History & Reports Manager for WooCommerce](https://wpfactory.com/item/stock-snapshot-for-woocommerce/) covers the actions, filters, scheduled action hooks, shortcode and stored data you can use in custom code. Settings are at **WPFactory > Stock Snapshot**. All hooks exist in both the free and Pro versions.

## Actions

| Action | Parameters | When it fires |
| --- | --- | --- |
| `alg_wc_stock_snapshot_take_snapshot_product` | `$product_id`, `$product`, `$stock`, `$index`, `$prev_stock` | After a snapshot of one product is saved. Fires for every snapshot, including product update snapshots. `$prev_stock` is `'-'` for a first snapshot. |
| `alg_wc_stock_snapshot_take_snapshot_start` | None | Before a full snapshot (periodic, manual or URL) starts. |
| `alg_wc_stock_snapshot_take_snapshot_end` | None | After a full snapshot finishes. |
| `alg_wc_stock_snapshot_core_loaded` | None | After the plugin core is loaded. |
| `alg_wc_stock_snapshot_settings_saved` | None | When the plugin settings are saved, before a section reset. The Tools run on this action. |
| `alg_wc_stock_snapshot_after_settings_saved` | None | After the settings are saved and any section reset has run. |

### Example: log large stock drops

```
add_action( 'alg_wc_stock_snapshot_take_snapshot_product', function ( $product_id, $product, $stock, $index, $prev_stock ) {
	if ( '-' !== $prev_stock && null !== $stock && ( $prev_stock - $stock ) >= 50 ) {
		wc_get_logger()->warning(
			sprintf( 'Stock for product #%d dropped from %s to %s', $product_id, $prev_stock, $stock ),
			array( 'source' => 'my-stock-alerts' )
		);
	}
}, 10, 5 );
```

## Filters

| Filter | Parameters | Use |
| --- | --- | --- |
| `alg_wc_stock_snapshot_request_uri_desc` | `$desc` (default `false`), `$data` (snapshot array), `$product_id`, `$is_short` | Return a string to replace the Context description for a snapshot, for example to label changes from your own stock tool. Return `false` to keep the default. |
| `alg_wc_stock_snapshot_report_product_name_add_category_list` | `$add` (default `false`) | Return `true` to add the product's categories after the product name in the Report section and report emails. |

```
// Show categories next to product names in the Report.
add_filter( 'alg_wc_stock_snapshot_report_product_name_add_category_list', '__return_true' );

// Label snapshots made by a custom stock sync endpoint.
add_filter( 'alg_wc_stock_snapshot_request_uri_desc', function ( $desc, $data, $product_id, $is_short ) {
	if ( isset( $data['request_uri'] ) && 0 === strpos( $data['request_uri'], '/wp-json/my-sync/' ) ) {
		return $is_short ? 'stock sync' : 'external stock sync';
	}
	return $desc;
}, 10, 4 );
```

## Scheduled action hooks (Action Scheduler)

| Hook | Purpose |
| --- | --- |
| `alg_wc_stock_snapshot_action` | Recurring periodic snapshot. Its argument is the interval in seconds. |
| `alg_wc_stock_snapshot_report_action` | One-off job that prepares Report data when **Prepare reports in background** is on. |
| `alg_wc_stock_snapshot_report_email_action` | Daily recurring report email (Pro), one per Email data line. |

You can inspect all three at **WooCommerce > Status > Scheduled Actions**.

## Taking a snapshot from code

```
// Full snapshot of all products. Returns the number of products recorded.
$count = alg_wc_stock_snapshot()->core->take_stock_snapshot( false );

// Snapshot of a single product.
alg_wc_stock_snapshot()->core->take_product_stock_snapshot( $product_id );
```

Pass `false` to `take_stock_snapshot()`. With the default `true`, it stops the request after running, as the URL snapshot does.

## Shortcode

`[alg_wc_stock_snapshot_restocked]` accepts `min_stock_diff` (1), `total_snapshots` (1), `new_stock` (no), `columns` (4), `paginate` (no), `orderby` (name, or `last_restocked`), `order` (ASC) and `not_found_msg`. It outputs a WooCommerce `[products]` grid. Full details are in [How to Show Recently Restocked Products in WooCommerce](https://wpfactory.com/docs/stock-history-restocked-products/).

## Stored data

- Snapshots are stored in post meta `_alg_wc_stock_snapshot` on each product and variation, as an array keyed by Unix timestamp.
- With Extra data off, each value is the stock quantity. With Extra data on, each value is an array with `stock`, `hook`, `user_id` and, when available, `request_uri`, `action`, `post_type` and `order_id`.
- Transients: `alg_wc_stock_snapshot_restocked`, `alg_wc_stock_snapshot_history` and `alg_wc_stock_snapshot_report_data`. They have no expiry and are deleted whenever a snapshot is taken or settings are saved.
- Settings are WordPress options prefixed `alg_wc_stock_snapshot_`. See the [settings reference](https://wpfactory.com/docs/stock-history-settings/).

Need a hand? Our team answers every ticket on the [Stock History support forum](https://wpfactory.com/support/).

Related articles

- [Stock History Troubleshooting: Missing Snapshots, Slow Reports and Emails](https://wpfactory.com/docs/stock-history-troubleshooting/)
- [Stock History Free vs Pro](https://wpfactory.com/docs/stock-history-free-vs-pro/)
- [How to See WooCommerce Stock History for a Product](https://wpfactory.com/docs/stock-history-product/)
- [Getting Started with Stock History & Reports Manager for WooCommerce](https://wpfactory.com/docs/stock-history-getting-started/)
- [How to Email WooCommerce Stock Reports Automatically](https://wpfactory.com/docs/stock-history-email-reports/)
