---
title: "How to build a WordPress inventory management system with GravityView"
date: 2026-05-07
author: "Casey Burridge"
link: "https://www.gravitykit.com/wordpress-inventory-management-gravityview/"
---

Most teams reach for QuickBooks Inventory, Sortly, or an expensive SaaS tool the moment someone says "we need to track stock." That's overkill if you don't sell online and just need an internal record of what you have, where it lives, and when to reorder.

There's a much lighter way to do this if you're already on WordPress. [Gravity Forms](https://www.gravityforms.com/) is the data layer. [GravityView](https://www.gravitykit.com/products/gravityview/) turns that data into a public, filterable, role-gated table that warehouse staff can update from the front end without ever logging into the WordPress admin. No e-commerce stack. No ERP. No per-seat licensing.

Here's what we're going to build in this tutorial: a Gravity Forms intake for new stock, a GravityView app for browsing and filtering, low-stock badges driven by reorder thresholds, and an Edit Entry view that lets staff update quantities.

Let's dive in!

## Sneak peek at the finished system

The **main inventory list** is a filterable table with search, supplier and category dropdowns, a quantity column, and a status badge that flips to red the moment stock dips below the reorder threshold. Each row has an Edit link for users who have permission to update item details.

![Main GravityView inventory listing with search, filters, and status badges](https://www.gravitykit.com/wp-content/uploads/2026/05/1-main-listing-view.png)The **Single Entry Layout** opens when someone clicks an item's SKU. It shows the full record (name, supplier, location, last counted date, notes, etc)
*and a link to edit. This is the read-only detail screen; useful for someone walking the floor with an iPad who just wants to confirm they're looking at the right item*![Single entry view showing full inventory record details](https://www.gravitykit.com/wp-content/uploads/2026/05/single-entry-front-end.png)The **Edit Entry Layout** is where the real magic happens. It exposes only the Quantity on hand and Last counted fields. Everything else (SKU, item name, unit cost, supplier)
*is locked down and cannot be edited*![Front-end Edit Entry form with only Quantity on hand and Last counted fields](https://www.gravitykit.com/wp-content/uploads/2026/05/edit-entry-front-end.png)

## What you'll need

Here are the plugins you'll need to create an inventory management system like the one in this tutorial:

- **[Gravity Forms](https://www.gravityforms.com/)** (Pro or Elite) – the data layer. You'll build two forms: one for inventory items, one for suppliers.
- **[GravityView](https://www.gravitykit.com/products/gravityview/)** (Pro or higher) – the front-end engine that displays, filters, and edits the entries you collect. 
    - **GravityView Advanced Filter** – bundled with GravityView Pro and All Access. You'll need it for the low-stock-only view.

- **[Gravity Forms Dynamic Lookup](/products/gravity-forms-dynamic-lookup/)** (free) – for creating a bridge between the two forms.
- **(Optional but recommended):** [GravityRevisions](/products/gravityrevisions/) – for keeping a detailed log of every update made to every form and entry

If you grab [All Access](https://www.gravitykit.com/products/all-access-pass/), every GravityKit add-on above is included for one flat license, which works out cheaper than buying all of the add-ons individually.

## Step 1: Plan the inventory schema

Before we start building, let's sketch out the data model. The pattern is **two forms**:

- **Inventory: Items** – one entry per SKU. The bulk of the data lives here.
- **Inventory: Suppliers** – one entry per vendor. Referenced from the Items form.

Splitting suppliers into their own form means you maintain vendor contact info in one place. Update an email address on the supplier record, and every item that references that supplier picks up the change automatically.

Why this beats a single big spreadsheet: every change is logged as a Gravity Forms entry edit (use [GravityRevisions](/products/gravityrevisions/) to keep an audit trail of every update), conditional logic comes for free, and you can grant front-end access by role. None of that is true in Google Sheets.

## Step 2: Build the Items form

In your WordPress admin, create a new form by hovering over **Forms** and clicking **New Form** (name it something like Inventory: Items). Next, add the following fields:

| Field | Type | Why |
|---|---|---|
| SKU | Single Line Text (No Duplicates) | Primary identifier. Must be unique. |
| Item name | Single Line Text | Human-readable label. |
| Category | Drop Down | Product, Asset, Supply — whatever buckets you need. |
| Quantity on hand | Number | The stock count. |
| Reorder threshold | Number | The line in the sand for low-stock alerts. |
| Unit cost | Number | Optional. Hide from front-end staff via Admin Only. |
| Supplier | Drop Down (Dynamic Lookup) | Pulled from the Suppliers form. (See below for how to set this up). |
| Location | Single Line Text | "Warehouse A — Bin 12". |
| Last counted | Date | When stock was last verified. |
| Notes | Paragraph Text | Catch-all. |
| Inventory value | Calculation | Quantity × Unit cost. Useful for reporting. |

![Gravity Forms editor with the Inventory Items form fields laid out](https://www.gravitykit.com/wp-content/uploads/2026/05/form-editor-inventory-items.png)
*There are a few important field settings to configure here, so let's go through each of them in detail*

### Mark SKU as "No Duplicates"

A stock register only works if SKU is unique. Open the SKU field settings tab, scroll down to **Rules**, and enable both **Required** and **No Duplicates**. Now Gravity Forms will reject any submission that reuses an existing SKU, which is exactly what you want!

![SKU field rules with Required and No Duplicates checkboxes ticked](https://www.gravitykit.com/wp-content/uploads/2026/05/sku-field-no-duplicates-checkbox.png)

### Add a calculation field for Inventory value

Add a new **Number** field called **Inventory value**. In the field's settings, scroll down and enable [calculations](https://docs.gravityforms.com/using-calculations/), then insert the below formula using the merge-tag picker so the field IDs are correct.

```
`{Quantity on hand} * {Unit cost}`
```

This simple formula multiplies the quantity of the item on hand with the cost so you can see the total value of the inventory.

![Calculation field with formula Quantity on hand times Unit cost](https://www.gravitykit.com/wp-content/uploads/2026/05/inventory-value-field-calculation.png)
*That value will recompute every time the entry is saved*

### Conditional logic for asset-only fields

If you're using one form for both consumable products and tracked assets, you may want to only show fields like **Serial number** when **Category** is set to "Asset." To set this up, open the Serial number field, click **[Conditional Logic](https://www.gravitykit.com/gravity-forms-conditional-logic/)**, and add a rule: show this field if Category is Asset. Done.

![Gravity Forms field settings showing Conditional Logic enabled with "Show this field if All of the following match: Category is Asset"

](https://www.gravitykit.com/wp-content/uploads/2026/05/CleanShot-2026-05-07-at-16.56.10@2x-1024x336.png)

## Step 3: Build the Suppliers form

Create a second form (name it something like Inventory: Suppliers) and add the following 5 fields:

- Supplier name (Single Line Text, Required)
- Contact email (Email)
- Phone (Phone)
- Notes (Paragraph Text)
- Status (Radio: Active / Inactive)

![Gravity Forms editor with the Suppliers form layout](https://www.gravitykit.com/wp-content/uploads/2026/05/form-editor-suppliers.png)
*Next: Add a few suppliers manually so the Items form has something to reference*

## Step 4: Link suppliers to items using Dynamic Lookup

Now connect the two forms. Back in your **Items** form, edit the **Supplier** dropdown. With GravityKit's free [Dynamic Lookup add-on](https://www.gravitykit.com/products/gravity-forms-dynamic-lookup/) installed, the field becomes a live lookup against the Suppliers form rather than a static list you maintain by hand.

After adding the field to your form, open the field settings and set **Source Form** to your Suppliers form (your form ID will differ) and **Source Field** to Supplier name.

![Dynamic Lookup field settings with Source Form and Source Field configured](https://www.gravitykit.com/wp-content/uploads/2026/05/dynamic-lookup-settings-field.png)
*Under the hood, the field renders as a normal Gravity Forms dropdown—it just pulls choices from the live Suppliers form rather than a static list!*![Dynamic Lookup input type set to Dropdown with Gravity Forms as the source of choices](https://www.gravitykit.com/wp-content/uploads/2026/05/dynamic-lookup-settings-source.png)
*When you add a new supplier in the Suppliers form, the Items form's Supplier dropdown updates instantly (no field edits required)*

## Step 5: Create the public inventory list with GravityView

This is where the data becomes a usable interface. Create a new View by hovering over **GravityKit** and clicking **New View**. Now choose your **Inventory: Items** form as the data source, and select either **Table** or **DataTables** as the View Type.

![GravityView Add New View screen with Inventory list named, Inventory: Items form selected as the data source, and Table and DataTables Table view types highlighted](https://www.gravitykit.com/wp-content/uploads/2026/05/CleanShot-2026-05-07-at-17.39.37@2x-1024x728.png)

### Configure the table columns

In the Multiple Entries Layout tab, scroll down to the Entries Fields section and drop in the fields you want as visible table columns.

![GravityView layout tabs with Multiple Entries Layout, Single Entry Layout, and Edit Entry Layout — Multiple Entries Layout selected](https://www.gravitykit.com/wp-content/uploads/2026/05/CleanShot-2026-05-07-at-17.42.01@2x-1024x146.png)
*A good default set:*
- SKU (linked to single entry, so clicking the SKU opens the detail view)
- Item name
- Category
- Supplier
- Status (this is a Custom Content field. See below for configuration details)
- Update (a Link to Edit Entry field: this is what allows authorized users to update items from the frontend)

![GravityView Entries Fields with SKU, Item name, Category, Supplier, Status, and Update columns](https://www.gravitykit.com/wp-content/uploads/2026/05/entries-fields.png)

### Add a search bar

Add a [**Search Bar** widget](https://www.gravitykit.com/docs/gravityview/search/configuring-the-search-bar/) to the **Top Widgets** area. The default search box is a free-text "search everything" field, which is fine—but you'll want a few targeted filters too. Click the gear icon to open the widget settings and add search inputs for SKU, Item name, Supplier, and Category. The Supplier and Category fields can be set to render as dropdowns in the search bar settings.

![GravityView Search Bar configured with SKU, Item name, Supplier, and Category fields](https://www.gravitykit.com/wp-content/uploads/2026/05/search-fields.png)

### Sorting and defaults

Next, scroll down to the **View Settings**, click on the **Sort & Filter** tab, set the default sort to **Item name, ascending**. Enable **sortable columns** so visitors can click any column header to re-sort. Set **page size** to 25 (enough to be useful, not enough to scroll forever).

### Add a low-stock status badge

The flat table works, but it doesn't tell you anything at a glance. We can fix that with a [Custom Content field](https://www.gravitykit.com/docs/gravityview/getting-started-gravityview/using-the-custom-content-field/) that compares each row's quantity against its threshold and renders a colored badge that says either "OK", "Reorder", or "Out of Stock".

Add a **Custom Content** field to the Entries Fields section of your View and set its label to `Status`. Here, we'll use the `[gvlogic]` shortcode to output a different status value depending on the inventory level for that item! We'll also add a few custom styles. Here's the full snippet (ready to copy/paste).

```
[gvlogic if="{Quantity on hand:4}" is="0"]
Out of stock
[else if="{Quantity on hand:4}" less_than="{Reorder threshold:5}"]
Reorder
[else]
OK
[/gvlogic]

```

The [merge-tag](https://www.gravitykit.com/gravity-forms-merge-tags/) IDs (`:4` and `:5`) are field IDs from your form—replace them with the actual IDs of your form's **Quantity on hand** and **Reorder threshold** fields.

The `[gvlogic]` shortcode ships with GravityView and runs the comparison per-row at render time. Once it's in place, refresh the inventory page and every row gets a green "OK," red "Reorder," or grey "Out of stock" pill. That's the visual cue that turns a flat table into a dashboard ops managers can scan.

Finally, save the view, and embed it on a page using the GravityView block in the WordPress block editor:

![Public inventory list with search, filters, sortable columns, and Edit links.](https://www.gravitykit.com/wp-content/uploads/2026/05/1-main-listing-view.png)
![](https://www.gravitykit.com/wp-content/uploads/2025/11/pro-tip.svg)**Pro Tip**
Learn more about the [ shortcode](https://www.gravitykit.com/docs/gravityview/shortcodes/gvlogic-shortcode/) and how you can use it to display custom content in a View based on conditions that you set.

That's the spine of the system done!

## Step 6: Enable front-end editing for warehouse staff

In the View editor, switch from the **Multiple Entries Layout** tab to the **Edit Entry Layout** tab. This is the form that renders when a user clicks **Edit** on a row.

The principle: only add the fields you want users to be able to edit. GravityView's Edit Entry view is a whitelist, not a blacklist. For this example, we'll add the following two fields, keeping the rest locked down:

- Quantity on hand
- Last counted

![GravityView Edit Entry Layout with Quantity on hand and Last counted as the only visible fields](https://www.gravitykit.com/wp-content/uploads/2026/05/edit-entry-layout.png)

### Restrict who can edit

By default, only administrators can edit entries via GravityView. In the View's Edit Entry Settings, you can also enable User Edit which allows logged-in users to edit entries that they created.

However, if you need more granular control over permissions, install the free [Members](https://wordpress.org/plugins/members/) plugin to create a custom user role and give it the ``gravityview_edit_others_entries`` [capability](https://www.gravitykit.com/docs/gravityview/roles-and-capabilities/gravityview-capabilities/).

## Step 7 (optional): Build a low-stock-only view

For operations managers who need a quick overview of what items need reordering, we can easily build a second View that only shows items where the Quantity on hand is less than the Reorder threshold. Start by duplicating your main inventory View (GravityView lets you clone with one click), and rename it to something else.

Next, open the View editor, scroll down to the View settings, and click on the **Filter & Sort** tab. Now find the **Advanced Filter** section and add the following condition: `Quantity on hand` is `less than` `{Reorder threshold:5}`. (The right-hand value is a merge tag pointing to the Reorder threshold field on each entry).

![GravityView Advanced Filter rule: Quantity on hand less than {Reorder threshold:5} merge tag.](https://www.gravitykit.com/wp-content/uploads/2026/05/CleanShot-2026-05-07-at-17.48.13@2x-1024x449.png)
Set the default sort to **Quantity on hand, ascending** so the most urgent items rise to the top. Embed the new view on a `/reorder/` page (or anywhere you like!). Now you have two Views that pull data from the same form: the full list for browsing, and the reorder list for action.

## The real-world workflow

Here's what this looks like for a warehouse worker on a Tuesday afternoon:

- Opens the inventory page on a tablet (or a desktop, or a phone).
- Filters to "Supply" category and searches for "espresso roast."
- Taps the Edit link on the row.
- The Edit Entry form appears—just two fields: Quantity on hand and Last counted.

![Front-end Edit Entry form showing Quantity on hand at 45 and Last counted at 2026-05-02](https://www.gravitykit.com/wp-content/uploads/2026/05/edit-entry-front-end.png)
- Updates Quantity on hand to 11, Last counted to today.
- Hits **Update**.
- The page redirects back to the list, the row now shows Quantity 11, the Status badge has flipped from green "OK" to red "Reorder," and the ops manager's dashboard picks it up automatically on next refresh.

No WordPress admin access required. No training. No risk of someone fat-fingering a SKU and breaking integrity!

## Optional enhancements

Extend the system with additional functionality using other GravityKit add-ons:

- [GravityRevisions](/products/gravityrevisions/): Keep a detailed log of changes made to forms and entries. Easily revert changes with a single click.
- [GravityEdit](/products/gravityedit/)**:** Enable spreadsheet-style inline editing for entries in a View making updates much quicker.
- [GravityCharts](/products/gravitycharts/): Create dynamic charts and graphs to visualize inventory levels.
- [GravityExport](/products/gravityexport/): Create automated reports on a custom schedule.
- [GravityMath](/products/gravitymath/): Compute aggregate stats across entries.

## Limitations and what this system can't do

- **No native barcode scanning UI.** A USB barcode scanner that acts as a keyboard works fine—point it at the SKU search field and scan. But there's no built-in mobile camera scanner.
- **No purchase orders, sales orders, or receiving workflows.** This is a register, not an ERP. If you need to issue POs and reconcile receipts against them, you'll need a different tool.
- **No API ingest out of the box.** Quantity updates are manual through the UI or via Update Entry feeds. There's no Shopify-style sync to an external system without a developer wiring it up.
- **No automatic depletion on sale.** This system won't know when you sell something—somebody has to update the count. If you want stock to drop automatically when a sale happens, you're looking at WooCommerce or custom development.

## Get started with GravityView today

In this tutorial, we built a lightweight inventory system on top of WordPress: two Gravity Forms forms (Items and Suppliers), two GravityView Views (main list, low-stock list), a status badge driven by reorder thresholds, and role-gated front-end editing for warehouse staff. No e-commerce stack, no ERP, no per-seat licensing!

If you're looking to build a similar system, [try GravityView today!](/products/gravityview/) And if you want the optional add-ons (GravityRevisions, GravityEdit, GravityExport, GravityCharts, GravityMath) bundled, the [GravityKit All Access Pass](/products/all-access-pass/) offers the best value.