Skip to main content

Heartland to iPaaS.com Standalone Inventory Mapping Documentation

Keep iPaaS.com product and product variant inventory levels current from Heartland on their own schedule, independently of the full product transfer.

Summary

Heartland inventory levels are transferred into iPaaS.com as Product Inventory and Product Variant Inventory records. Each record carries the quantity available, quantity on hand, and unit cost for one item at one Heartland location, and is written against the linked iPaaS.com product (or product variant) and the linked iPaaS.com location.

Four mapping collections cover this area, split two ways. The first split is by level: product-level inventory and variant-level inventory are handled by separate collections, because iPaaS.com stores them on separate record types. The second split is by action: an Add collection creates inventory records that are not yet linked to iPaaS.com, and an Update collection keeps records that are already linked in step with Heartland.

This is an inbound-only area (Heartland to iPaaS.com). Inventory transferred in this direction is read-only stock information. Writing inventory changes back into Heartland is handled by separate inventory-adjustment collections in the opposite direction and is outside the scope of this article.

What "Standalone" Means Here

"Standalone" distinguishes these four collections from the inventory that transfers as a child of a product. Heartland inventory reaches iPaaS.com by two different routes:

  • As a child of the product transfer: the Add/Update Heartland Product Inventory TO iPaaS.com and Add/Update Heartland Product Variant Inventory TO iPaaS.com collections are children of the full Add/Update Heartland Product TO iPaaS.com transfer. Inventory moves only when the whole product record moves, and it arrives as part of that product's payload.

  • Standalone: the four collections in this article run on their own, driven by the inventory polling paths rather than by a product transfer. They carry only the inventory values and the location those values apply to. Nothing about the product or variant record itself is created or changed.

The practical consequence is that standalone inventory lets you refresh stock levels frequently and cheaply, without re-sending an entire product record each time. The trade-off is that a standalone inventory record has nothing to attach itself to unless the product or variant it belongs to is already present and linked in iPaaS.com. That requirement is enforced directly in the Add collections' mapping filters, which check for a linked iPaaS.com product or variant before allowing the record through. The child collections carry no such check, because the product they belong to is being transferred in the same operation.

Add Versus Update

Add and Update are documented together here because they are the same transfer expressed at two stages of an inventory record's life, and they share their mappings, caveats, and setup requirements almost entirely. The distinction between them is worth stating precisely:

  • The Add collections create iPaaS.com inventory records that do not yet exist. They fire for a Heartland inventory record that has no external-id link to an iPaaS.com inventory record. Because a new record must be attached to something, they map the parent explicitly — the Add collections resolve and write the parent product or parent variant, and their mapping filters refuse any record whose parent is not already linked in iPaaS.com.

  • The Update collections write to an iPaaS.com inventory record that already exists and is linked. They fire for a Heartland inventory record whose identifier is already saved as an external id. They do not map the parent at all: the association to the product or variant is already established through the existing record link and is carried forward rather than re-sent. Their mapping filters are correspondingly simpler, excluding only the hidden Heartland Retail Online location.

Which collection handles a given Heartland inventory record is determined by whether that record is already linked by an external id, not by which polling event or manual action triggered the transfer. In normal operation both collections are enabled: the Add collection populates a record the first time its inventory is seen at a location, and the Update collection keeps it current from then on.

ID Format

Manual Sync ID Format

On the iPaaS.com Manual Sync page, enter the Heartland inventory record's identifier. This is a composite value: the Heartland item id, a vertical-bar separator, and the Heartland location id — for example, item 101602 at a given location is entered as 101602, a vertical bar, then that location's Heartland id. The first segment, the portion before the vertical bar, is the item the inventory belongs to, and it is the segment the integration reads to find the matching iPaaS.com product or product variant.

Heartland uses different APIs for grid and simple items, so where a manual sync references a Heartland item identifier on its own, that identifier carries a _GRID or _SIMPLE suffix — for example, 101602_grid or 12345_simple. Use the correct suffix; an item identifier submitted without it returns a not-implemented error.

External ID Format

After a successful transfer, iPaaS.com saves the Heartland inventory record's composite identifier as the external-id link between the two systems. That link is how later transfers find the same iPaaS.com inventory record rather than creating a duplicate, and it is what routes a record to the Update collection instead of the Add collection. Because the identifier combines the item and the location, each item-and-location pair is linked separately: the same item at three Heartland locations produces three linked iPaaS.com inventory records.

Deleted Record Support

Deleting an inventory record is not supported in this direction, for either product inventory or product variant inventory. These collections create and update iPaaS.com inventory records only. Removing or zeroing inventory in Heartland does not delete the linked iPaaS.com inventory record; a quantity that drops to zero in Heartland is transferred as a zero quantity, but the record itself remains. Inventory records that should no longer exist must be managed directly in iPaaS.com.

Custom Field Support

No Heartland custom fields are mapped by these collections. They transfer only the quantity, cost, parent, and location values listed under Mappings.

Custom fields on the iPaaS.com side still deserve attention, because of how updates are written. When iPaaS.com writes an existing inventory record, the full record is replaced, and any writable field the collection does not set is written with an empty value. If your integration stores values in iPaaS.com inventory custom fields, add a Dynamic Formula mapping whose source is DestinationValue.[FieldName] for each field you need to keep. That reads the current iPaaS.com value and writes it back, so the field survives the update. Review the inventory fields your integration relies on and confirm each is either mapped or preserved before enabling updates.

Mapping Collection Status

  • Status: Enabled. All four collections are enabled by default.

  • Trigger Events: Automatic transfers run on a schedule through polling. Product inventory is picked up by the product inventory polling event, and variant inventory by the product variant inventory polling event; the integration also publishes inventory creation and update events for both levels. Heartland's webhook format is not compatible with iPaaS.com instant webhooks, so inventory arrives through polling rather than instant push notifications. Polling does not run until the subscription is configured and enabled. Individual inventory records can also be transferred at any time from the iPaaS.com Manual Sync page.

Duplicate or Conflicting Mappings

Several mapping collections operate on Heartland inventory. Understand how they relate before enabling them together:

  • Add and Update at the same level: the Add and Update collections for a given level are complements, not competitors. A Heartland inventory record is routed to one or the other based on whether it is already linked by an external id, so both can safely be enabled at once. Enabling only the Update collection means new inventory is never created; enabling only the Add collection means existing inventory is never refreshed.

  • Standalone versus child: the Add/Update Heartland Product Inventory TO iPaaS.com and Add/Update Heartland Product Variant Inventory TO iPaaS.com collections transfer the same inventory values as part of the full product transfer. They write the same iPaaS.com fields on the same records. Running both routes is supported and is the usual configuration — the product transfer establishes inventory alongside the product, and the standalone collections keep it current between product transfers — but be aware that both are writing the same values, so a stale product transfer can briefly reassert an older quantity.

  • Opposite direction: the inventory adjustment collections that write from iPaaS.com into Heartland move data the other way. Before running the inbound and outbound directions together, decide which system is the source of truth for inventory and set your mapping collection filters and polling schedules accordingly. If both directions are active with the default mappings, inventory changes can propagate back and forth between the systems in a feedback loop.

Collision Handling

This integration does not use iPaaS.com collision handling for inventory. Whether an incoming inventory record is created or updated is determined solely by whether it is already linked by an external id; there is no collision recovery step to configure.

Supported Child Collections

None. All four collections are leaf collections. Each transfers a single inventory record and has no dependent child collections.

Inventory that transfers as a child of a product is handled by the separate Add/Update Heartland Product Inventory TO iPaaS.com and Add/Update Heartland Product Variant Inventory TO iPaaS.com collections, which are children of the product transfer rather than of anything in this article.

System Caveats

Heartland Caveats

  • Inventory for the hidden Heartland Retail Online location is never transferred. All four collections exclude it by filter, so internal online-only stock does not flow to iPaaS.com.

  • The Heartland inventory record identifier is a composite of the item id and the location id, separated by a vertical bar. The integration reads the item id from the first segment.

  • Heartland uses different APIs for grid and simple items, so item identifiers carry a _GRID or _SIMPLE suffix. Use the correct suffix in any manual sync that references an item identifier.

  • Heartland inventory levels transferred to iPaaS.com are read-only values. Adjusting Heartland inventory is done through the separate inventory-adjustment collections in the opposite direction, not by writing these fields.

  • Heartland's webhook format is not compatible with iPaaS.com instant webhooks, so inventory arrives through scheduled polling. Expect a delay between a stock change in Heartland and its arrival in iPaaS.com, bounded by the polling schedule.

  • The first time inventory polling runs, only the last five days of inventory adjustment history are searched. An optional inventory search-days subscription setting extends how far back a polling cycle looks, which is useful for temporary troubleshooting.

iPaaS.com Caveats

  • Every iPaaS.com inventory record requires a parent — a product for product inventory, a product variant for variant inventory — and a valid location. Neither can be empty.

  • The parent product or variant must already exist and be linked in iPaaS.com before its standalone inventory can transfer. The Add collections' filters skip records whose parent is not linked.

  • The Heartland location must already be linked to an iPaaS.com location for the location value to resolve. If it does not resolve, the record cannot be written to a location.

  • On update, iPaaS.com replaces the full inventory record. Any writable field not set by the collection is written with an empty value.

Integration-Specific Caveats

  • The Update collections do not map the parent product or variant. That association is preserved through the existing record link, which is why an Update can only be applied to a record that is already linked.

  • Inventory for an unlinked product or variant is skipped, not queued. The filter declines the record quietly and raises no error; it transfers on a later polling cycle or Manual Sync once the product or variant itself has been transferred and linked.

  • The integration performs no automatic prerequisite transfer for inventory. Unlike some other areas of this integration, an inventory transfer will not reach out and create the missing product, variant, or location on your behalf. Those records must arrive through their own collections first.

  • Standalone inventory transfers are limited to records changed since the last polling cycle. They do not perform a bulk load of all inventory at once.

Setup Requirements

Heartland Configuration

  • Confirm your Heartland locations are the ones you want reflected in iPaaS.com. The hidden Heartland Retail Online location is excluded by default; if your configuration requires a different set of locations, the mapping filters can be adjusted.

  • Note the correct _GRID or _SIMPLE suffix for any item identifier you intend to use in a manual sync.

  • Optionally set the inventory search-days value on the subscription if the default look-back window is too narrow for your initial population or for troubleshooting.

iPaaS.com Configuration

  • Transfer and link your Heartland locations first, through the Add/Update Heartland Location TO iPaaS.com collection. Without a linked location, the location value on an inventory record cannot resolve.

  • Transfer and link your products and product variants before relying on standalone inventory. Inventory for an unlinked product or variant is skipped.

  • Enable both the Add and the Update collection at each level you use, so that new inventory is created and existing inventory is kept current.

  • If you store values in iPaaS.com inventory custom fields, add preserving Dynamic Formula mappings for them before enabling updates.

  • Enable the subscription so inventory polling can run.

Authentication & Security

Heartland uses OAuth 2.0 to obtain an access token, which authorizes the Heartland API requests made during a transfer. Credentials are configured on the Heartland subscription — see the Heartland Installation Instructions.

Integration Flow

Scheduled polling — product inventory:

  1. On its polling schedule, the integration searches Heartland for product inventory changed since the last polling cycle. On the first run, only the recent history window is searched.

  2. For each changed inventory record, it assembles the composite identifier from the Heartland item id and location id.

  3. The record is evaluated against the mapping filter of each enabled product inventory collection. Records at the hidden Heartland Retail Online location are dropped here.

  4. A record with no existing external-id link is routed to Add Heartland Product Inventory Standalone TO iPaaS.com, which additionally confirms that the item's product is already linked in iPaaS.com before proceeding. It resolves the linked iPaaS.com product and location, then creates the iPaaS.com Product Inventory record and saves the composite identifier as its external id.

  5. A record that is already linked is routed to Update Heartland Product Inventory Standalone TO iPaaS.com, which resolves the linked iPaaS.com location and writes the current quantities and cost to the existing record.

Scheduled polling — product variant inventory:

  1. On its polling schedule, the integration searches Heartland for variant inventory changed since the last polling cycle.

  2. Each changed record is evaluated against the mapping filters, and records at the hidden Heartland Retail Online location are dropped.

  3. An unlinked record is routed to Add Heartland Product Variant Inventory Standalone TO iPaaS.com, which confirms the referenced Heartland variant is already linked to an iPaaS.com product variant, resolves that variant and the location, and creates the iPaaS.com Product Variant Inventory record.

  4. A linked record is routed to Update Heartland Product Variant Inventory Standalone TO iPaaS.com, which resolves the location and writes the current quantities and cost to the existing record.

Manual Sync:

  1. A Heartland inventory record identifier is entered on the iPaaS.com Manual Sync page.

  2. The integration retrieves that single inventory record from Heartland.

  3. The record passes through the same filter evaluation and the same create-or-update routing as a polled record, so the resulting iPaaS.com record is identical regardless of how the transfer was triggered.

No prerequisite records are transferred automatically as part of these flows. If the product, variant, or location an inventory record depends on is not yet linked in iPaaS.com, the record is skipped or the transfer does not complete; it is not resolved by creating the missing record on the fly.

Mappings

Add Heartland Product Inventory Standalone TO iPaaS.com

Mapping Filter

if(LocationId == 100010) {return false;} //Heartland Retail Online
else {
  string[] parsedId = Id.Split("|");
  var productId = parsedId.FirstOrDefault();
  var exists = await GetSpaceportIdAsync(productId, "Product", SpaceportSystemId);
  if (!String.IsNullOrEmpty(exists.toString())){return true;}
}
return false;

The filter processes a Heartland inventory record only when both of its conditions are met, and it takes one of three paths:

  • The record is at the hidden Heartland Retail Online location: the filter returns false immediately and the record is not transferred. Inventory for that location never reaches iPaaS.com.

  • The record is at any other location and its product is already linked in iPaaS.com: the filter reads the item id from the first segment of the composite identifier, the portion before the vertical bar, and looks up a linked iPaaS.com product for it. When a linked product is found, the filter returns true and the record transfers.

  • The record is at any other location but its product is not linked in iPaaS.com: the lookup returns nothing, so the filter falls through and returns false. The record is skipped.

The filter raises no errors and throws no messages. A skipped record is simply not transferred; inventory for an unlinked product waits until that product has been transferred to iPaaS.com, and is picked up on a later polling cycle or Manual Sync.

Description: Creates a new iPaaS.com Product Inventory record from a Heartland product inventory record, attaching it to the linked iPaaS.com product and location and storing the current quantities and unit cost. The Heartland composite identifier is saved as the record's external id and is the durable match key; it is not a configurable mapping row.

Mapping Type

Source Field (Heartland)

Destination Field (iPaaS.com)

Description

Dynamic Formula

string[] parsedId = Id.Split("\|"); var productId = parsedId.FirstOrDefault(); return await GetSpaceportIdAsync(productId, "Product", SpaceportSystemId);

ParentId

Required. Identifies which iPaaS.com product the inventory record belongs to. The formula reads the Heartland item id from the first segment of the composite identifier, the portion before the vertical-bar separator, then resolves the linked iPaaS.com product and stores its id so the inventory is attached to the correct product. iPaaS.com will not create a product inventory record without a parent product, and the collection's filter prevents transfer when the product is not yet linked.

Dynamic Formula

return await GetSpaceportIdAsync(LocationId, "Location", SpaceportSystemId);

LocationId

Required. Resolves the linked iPaaS.com location from the Heartland location id and stores it, so the inventory level is recorded at the correct location. iPaaS.com requires a valid location on every product inventory record. If the Heartland location is not yet linked to an iPaaS.com location, the value cannot be resolved and the record is not transferred.

Field

QtyAvailable

QtyAvailable

Optional. Stores the Heartland inventory record's available quantity in the iPaaS.com QtyAvailable field. Inventory quantities are read-only values in this inbound direction; the collection records the quantity Heartland reports rather than adjusting it.

Field

QtyOnHand

QtyOnHand

Optional. Stores the Heartland inventory record's on-hand quantity in the iPaaS.com QtyOnHand field. Inventory quantities are read-only values in this inbound direction; the collection records the quantity Heartland reports rather than adjusting it.

Field

UnitCost

Cost

Optional. Stores the Heartland inventory record's unit cost in the iPaaS.com Cost field on the product inventory record.

Update Heartland Product Inventory Standalone TO iPaaS.com

Mapping Filter

LocationId != 100010 //Heartland Retail Online is a hidden location

The filter has a single condition and two outcomes:

  • The record is at the hidden Heartland Retail Online location: the condition is false and the record is skipped. No update is sent for it.

  • The record is at any other location: the condition is true and the record is processed.

Unlike the Add collection's filter, this one does not re-check that the product is linked in iPaaS.com. That check is unnecessary here, because an Update is only routed to a record that is already linked. The filter raises no errors and throws no messages. Subscribers can adjust it if their configuration requires a different set of locations.

Description: Updates an existing, linked iPaaS.com Product Inventory record with the current quantities and unit cost from Heartland, applied at the linked iPaaS.com location. The parent product is not re-sent; it is carried forward from the existing record link.

Mapping Type

Source Field (Heartland)

Destination Field (iPaaS.com)

Description

Dynamic Formula

return await GetSpaceportIdAsync(LocationId, "Location", SpaceportSystemId);

LocationId

Required. Resolves the Heartland location on the inventory record to the corresponding linked iPaaS.com location, so the updated inventory level is applied to the correct location. iPaaS.com requires a valid location on every inventory record. If the Heartland location has not been linked, the formula returns no location and the update does not complete; this surfaces in the iPaaS.com Dashboard error logs. Transfer and link the location through the Add/Update Heartland Location TO iPaaS.com collection before inventory updates run.

Field

QtyOnHand

QtyOnHand

Recommended. Stores Heartland's on-hand quantity for the product at this location in the iPaaS.com QtyOnHand field. This is a read-only inventory level supplied by Heartland, and along with QtyAvailable is one of the values the collection exists to keep current.

Field

QtyAvailable

QtyAvailable

Recommended. Stores Heartland's available quantity for the product at this location in the iPaaS.com QtyAvailable field. This is a read-only inventory level supplied by Heartland, and along with QtyOnHand is one of the values the collection exists to keep current.

Field

UnitCost

Cost

Optional. Stores the Heartland unit cost in the iPaaS.com Cost field, keeping the per-unit cost current for the linked product at this location.

Add Heartland Product Variant Inventory Standalone TO iPaaS.com

Mapping Filter

if(LocationId == 100010) {return false;} //Heartland Retail Online
else {
  string[] parsedId = Id.Split("|");
  var productId = parsedId.FirstOrDefault();
  var exists = await GetSpaceportIdAsync(productId, "Product Variant", SpaceportSystemId);
  if (!String.IsNullOrEmpty(exists.toString())){return true;}
}
return false;

This filter has the same three-way shape as the product-level Add filter, but its lookup targets a product variant rather than a product:

  • The record is at the hidden Heartland Retail Online location: the filter returns false immediately and the variant inventory record is not transferred.

  • The record is at any other location and its variant is already linked in iPaaS.com: the filter reads the item id from the first segment of the composite identifier and looks up a linked iPaaS.com product variant for it. When a linked variant is found, the filter returns true and the record transfers.

  • The record is at any other location but its variant is not linked in iPaaS.com: the lookup returns nothing, the filter falls through and returns false, and the record is skipped.

The filter raises no errors and throws no messages. Variant inventory is transferred only for variants that already exist in iPaaS.com. To have a variant's inventory transfer, first transfer the variant itself through the product and variant collections so that it is linked.

Description: Creates a new iPaaS.com Product Variant Inventory record from a Heartland variant inventory record, attaching it to the linked iPaaS.com product variant and location and storing the current quantities and unit cost. The Heartland composite identifier is saved as the record's external id.

Mapping Type

Source Field (Heartland)

Destination Field (iPaaS.com)

Description

Dynamic Formula

string[] parsedId = Id.Split("\|"); var productId = parsedId.FirstOrDefault(); return await GetSpaceportIdAsync(productId, "Product Variant", SpaceportSystemId);

ParentId

Required. Resolves the iPaaS.com product variant the inventory belongs to. The formula reads the variant portion from the beginning of the Heartland record identifier, looks up the matching linked iPaaS.com product variant, and stores its id so the inventory record is associated with its variant. iPaaS.com requires a parent variant id greater than zero on every variant inventory record. Records for variants that are not yet linked are skipped by the mapping filter rather than transferred.

Dynamic Formula

return await GetSpaceportIdAsync(LocationId, "Location", SpaceportSystemId);

LocationId

Required. Resolves the iPaaS.com location the inventory belongs to. The formula takes the Heartland location from the record, looks up the matching linked iPaaS.com location, and stores that location id. iPaaS.com will not create a variant inventory record without a valid location id, and the Heartland location must already be linked for the value to resolve.

Field

QtyAvailable

QtyAvailable

Optional. Stores the Heartland available quantity for the variant at the location in the iPaaS.com QtyAvailable field. This is a read-only inventory level from Heartland.

Field

QtyOnHand

QtyOnHand

Optional. Stores the Heartland on-hand quantity for the variant at the location in the iPaaS.com QtyOnHand field. This is a read-only inventory level from Heartland.

Field

UnitCost

Cost

Optional. Stores the Heartland unit cost of the variant in the iPaaS.com Cost field on the variant inventory record. If Heartland does not supply a unit cost, no cost is stored.

Update Heartland Product Variant Inventory Standalone TO iPaaS.com

Mapping Filter

LocationId != 100010 //Heartland Retail Online is a hidden location

The filter has a single condition and two outcomes:

  • The record is at the hidden Heartland Retail Online location: the condition is false and the record is skipped. No update is sent for it, so that hidden location's stock is not reflected in iPaaS.com inventory.

  • The record is at any other location: the condition is true and the variant inventory update is processed.

The filter does not re-check that the variant is linked, because an Update is only routed to an inventory record that already exists and is linked. It raises no errors and throws no messages. Subscribers can adjust it if their configuration requires a different set of locations.

Description: Updates an existing, linked iPaaS.com Product Variant Inventory record with the current quantities and unit cost from Heartland, applied at the linked iPaaS.com location. The variant reference is not re-sent; it is carried forward from the existing record link.

Mapping Type

Source Field (Heartland)

Destination Field (iPaaS.com)

Description

Dynamic Formula

return await GetSpaceportIdAsync(LocationId, "Location", SpaceportSystemId);

LocationId

Required. Sets the location on the iPaaS.com variant inventory record by resolving the Heartland location to its matching iPaaS.com location, so the inventory values are applied to the correct location. iPaaS.com requires a valid location on every variant inventory record. If the Heartland location is not yet linked, the resolved value is empty and the update cannot be applied to a location, so transfer the Heartland locations to iPaaS.com before relying on variant inventory updates.

Field

QtyOnHand

QtyOnHand

Recommended. Stores the Heartland variant's on-hand quantity in the iPaaS.com variant inventory QtyOnHand field. iPaaS.com treats this quantity as optional on the record, but it is one of the inventory values the collection exists to keep current, so map it.

Field

QtyAvailable

QtyAvailable

Recommended. Stores the Heartland variant's available quantity in the iPaaS.com variant inventory QtyAvailable field. iPaaS.com treats this quantity as optional on the record, but it is one of the inventory values the collection exists to keep current, so map it.

Field

UnitCost

Cost

Recommended. Stores the Heartland variant's unit cost in the iPaaS.com variant inventory Cost field. iPaaS.com treats cost as optional on the record, but it is one of the inventory values the collection exists to keep current, so map it to keep the iPaaS.com variant inventory accurate.

Unmapped Field Overwrite Risk

When iPaaS.com updates an existing inventory record, the full record is replaced. Any writable field that the collection does not map is written with an empty value on each transfer.

Between them, the Add collections map every writable field on the inventory record — the parent, the location, both quantities, and the cost — so on creation there are no unmapped writable fields left to be cleared. The Update collections deliberately omit the parent reference: that association, and the external id link, are what let the integration find and re-associate the existing record, and both are preserved through the record link rather than being re-sent.

The exposure is inventory custom fields. If your integration stores custom-field values on iPaaS.com inventory or variant inventory records, they are cleared on update unless you preserve them. Add a Dynamic Formula mapping whose source is DestinationValue.[FieldName] for each field you need to keep; that reads the current iPaaS.com value and writes it back so it is not cleared. Review the inventory fields your integration relies on and confirm each is either mapped or preserved before running updates.

Error Handling

  • Missing required fields: an inventory record that does not supply the values iPaaS.com requires is not written. Confirm the parent and location mappings resolve and that the required values are present in Heartland, then retry.

  • Location not linked: when the Heartland location on an inventory record has not been transferred and linked to an iPaaS.com location, the location value cannot resolve and the transfer does not complete. The error appears in the iPaaS.com Dashboard error logs. Transfer the location through the Add/Update Heartland Location TO iPaaS.com collection, then retry through a new polling cycle or Manual Sync.

  • Product or variant not linked: this is not an error. The Add collections' filters skip inventory for a product or variant that is not yet linked in iPaaS.com, quietly and without raising anything. The record transfers on a later cycle once its product or variant has been transferred and linked. If inventory you expect is missing from iPaaS.com, check first that its product or variant is present and linked.

  • Missing grid or simple suffix: a manual sync that references a Heartland item identifier without the required _GRID or _SIMPLE suffix returns a not-implemented error. Re-enter the identifier with the correct suffix for the item type.

  • Inventory record not found: when a Manual Sync is run for an inventory record identifier that does not exist in Heartland, or the record cannot be retrieved, the transfer fails and no iPaaS.com record is created or updated. Confirm the item id and location id in the composite identifier are correct.

  • Heartland API temporarily unavailable: if Heartland cannot be reached when a transfer is triggered, the transfer fails. The error appears in the iPaaS.com Dashboard error logs, and the record can be retried through a new polling cycle or Manual Sync once the service is available.

  • Historical inventory not appearing: the first inventory polling run searches only the most recent history window, so older changes are not picked up by that initial cycle. Extend the inventory search-days subscription setting temporarily if you need a wider look-back.

Testing & Validation

Test Scenarios

  1. New product inventory created — with a Heartland product already linked in iPaaS.com, change its inventory at a non-hidden location, transfer the record, and confirm a new iPaaS.com Product Inventory record is created with the matching quantities, cost, product, and location.

  2. Existing product inventory updated — change the quantity on that same item and location, transfer again, and confirm the same iPaaS.com record is updated with no duplicate created.

  3. New variant inventory created — with a Heartland product variant already linked in iPaaS.com, change its inventory at a non-hidden location and confirm a new iPaaS.com Product Variant Inventory record is created and attached to the correct variant.

  4. Existing variant inventory updated — change the quantity again on the same variant and location and confirm the existing iPaaS.com variant inventory record is updated in place.

  5. Unlinked product skipped — change inventory for a Heartland product that has not been transferred to iPaaS.com, run the transfer, and confirm the record is skipped with no iPaaS.com record created and no error raised.

  6. Unlinked variant skipped — repeat the previous scenario at the variant level and confirm the same quiet skip.

  7. Skipped record recovers after linking — transfer the previously unlinked product or variant, then transfer its inventory again and confirm the inventory record is now created.

  8. Hidden location excluded — change inventory at the hidden Heartland Retail Online location and confirm no iPaaS.com inventory record is created or updated for it, from any of the four collections.

  9. Unlinked location — change inventory at a Heartland location that has not been linked to an iPaaS.com location and confirm the transfer does not complete and the error is visible in the Dashboard error logs.

  10. Multiple locations tracked separately — change inventory for the same item at two different Heartland locations and confirm two distinct iPaaS.com inventory records exist, one per location.

  11. Zero quantity — reduce an item's Heartland quantity to zero, transfer it, and confirm the linked iPaaS.com inventory record is updated to zero rather than being removed.

  12. Cost transferred — set a unit cost in Heartland, transfer the inventory, and confirm the cost appears on the iPaaS.com inventory record.

  13. Manual Sync by composite id — enter a known Heartland inventory record identifier on the Manual Sync page and confirm that specific record transfers.

  14. Grid and simple suffixes — run a manual sync referencing a grid item identifier and a simple item identifier with their correct suffixes, and confirm each resolves.

  15. Custom field preservation — with a value stored in an iPaaS.com inventory custom field and a preserving Dynamic Formula mapping in place, run an update and confirm the custom value survives.

  16. Polling — with the subscription enabled, change inventory in Heartland and confirm it arrives in iPaaS.com on the next polling cycle without manual intervention, at both the product and variant levels.

Validation Checklist

  • Heartland locations are transferred and linked before inventory is validated.

  • Products and product variants are transferred and linked before their inventory is validated.

  • Each transferred inventory record is linked by the Heartland composite identifier, and re-transfers update rather than duplicate.

  • The parent product or variant on each created record is the correct one, and remains correct after subsequent updates.

  • The location on each record resolves to the expected linked iPaaS.com location.

  • QtyOnHand, QtyAvailable, and Cost match the Heartland values after a transfer.

  • No inventory record exists in iPaaS.com for the hidden Heartland Retail Online location.

  • Inventory custom fields your integration relies on are either mapped or preserved, and are not cleared by an update.

  • Both the Add and the Update collection are enabled at each level you use.

  • Polling and Manual Sync produce the same resulting record for the same Heartland inventory record.

Additional Notes

  • Heartland is the source of truth for the inventory values listed under Mappings. Editing those quantities or the cost directly in iPaaS.com will be overwritten on the next transfer of that record.

  • Standalone inventory and product-child inventory write the same iPaaS.com fields. Running both is the usual configuration, but if a quantity appears to move backwards, check whether a product transfer carrying older inventory has run since the last standalone update.

  • Because inventory arrives by polling rather than instant webhooks, allow for the polling interval when validating a change made in Heartland.

  • Order of operations matters more here than in most areas of this integration: locations first, then products and variants, then inventory. Inventory transferred out of that order is skipped or fails, and nothing is created automatically to fill the gap.

  • Inventory is tracked per item and per location. The same item at several locations produces several independently linked iPaaS.com inventory records.

Related Documents

Setup & Reference

Did this answer your question?