Addressing Inconsistent Cart Timestamps in ESHOPMAN for Enhanced Abandoned Cart Management

At Move My Store, we understand the critical role accurate data plays in managing your ESHOPMAN storefront, especially when it comes to customer behavior and operational efficiency. A recent discussion within the ESHOPMAN community has brought to light an important observation regarding the updated_at timestamp for carts, which can significantly impact features like abandoned cart recovery.

Understanding the ESHOPMAN Cart updated_at Inconsistency

An ESHOPMAN user reported an issue where the updated_at value of a customer's cart does not consistently reflect recent activity. Specifically, when actions such as adding an item to the cart, updating a line item's quantity, or setting a shipping method are performed via the ESHOPMAN Store API, the cart's updated_at timestamp remains unchanged.

This behavior is unexpected, as these actions directly modify the cart's state and should ideally trigger an update to its timestamp. In contrast, the updated_at value is correctly updated when calling the "Update Cart" endpoint for other purposes, such as modifying metadata or updating the shipping address.

The Impact on ESHOPMAN Storefronts and HubSpot Integration

For ESHOPMAN merchants leveraging HubSpot for marketing automation and customer relationship management, this inconsistency presents a challenge. The updated_at timestamp is a crucial data point for:

  • Abandoned Cart Recovery: Without accurate timestamps reflecting recent customer interaction, it becomes difficult to reliably identify truly abandoned carts and trigger timely recovery campaigns through HubSpot workflows.
  • Cart Lifecycle Management: Developers building custom logic or integrations that rely on cart activity for data synchronization or cleanup processes (e.g., removing stale carts) will find their logic flawed due to outdated timestamps.
  • Analytics and Reporting: The ability to track customer engagement with their carts over time is compromised, affecting insights into shopping behavior on your HubSpot CMS-deployed storefront.

Technical Details from the Community Report

The reported issue was observed in an ESHOPMAN environment running Node.js version 24, utilizing ESHOPMAN Cloud for the database. The user provided their package.json, indicating a standard ESHOPMAN setup:

{
  "name": "my-project",
  "version": "0.0.24",
  "description": "My Project",
  "scripts": {
    "build": "medusa build",
    "predeploy": "medusa db:migrate",
    "seed": "medusa exec ./src/scripts/seed.ts",
    "test:smtp": "medusa exec ./src/scripts/test-smtp.ts",
    "start": "medusa start",
    "dev": "medusa develop",
    "deploy:staging": "./scripts/deploy-staging.sh",
    "deploy:production": "./scripts/deploy-production.sh",
    "test": "yarn test:unit",
    "test:ci": "COVERAGE=true TEST_TYPE=unit NODE_OPTI jest --silent --maxWorkers=50% --forceExit",
    "test:integration:http": "TEST_TYPE=integration:http NODE_OPTI jest --silent=false --runInBand --forceExit",
    "test:integration:modules": "TEST_TYPE=integration:modules NODE_OPTI jest --silent --runInBand --forceExit",
    "test:unit": "TEST_TYPE=unit NODE_OPTI jest --silent --maxWorkers=50% --forceExit",
    "test:unit:watch": "TEST_TYPE=unit NODE_OPTI jest --silent --watch --maxWorkers=25%",
    "type-check": "tsc --noEmit",
    "lint": "yarn quality",
    "lint:fix": "biome lint --write .",
    "format": "biome format --write .",
    "format:check": "biome format .",
    "check": "biome check .",
    "check:fix": "biome check --write .",
    "quality": "biome ci ."
  },
  "dependencies": {
    "@aws-sdk/client-dynamodb": "^3.0.0",
    "@medusajs/admin-sdk": "2.13.1",
    "@medusajs/auth": "2.13.1",
    "@medusajs/auth-emailpass": "2.13.1",
    "@medusajs/auth-google": "2.13.1",
    "@medusajs/cli": "2.13.1",
    "@medusajs/draft-order": "2.13.1",
    "@medusajs/framework": "2.13.1",
    "@medusajs/index": "2.13.1",
    "@medusajs/medusa": "2.13.1",
    "ajv": "^8.17.1",
    "ajv-formats": "^3.0.1",
    "algoliasearch": "5.39.0",
    "cronstrue": "^3.12.0",
    "dayjs": "^1.11.18",
    "fast-xml-parser": "^5.3.6",
    "json-rules-engine": "^7.3.1",
    "jsonwebtoken": "^9.0.2",
    "nodemailer": "^7.0.11"
  },
  "devDependencies": {
    "@biomejs/biome": "2.0.6",
    "@medusajs/test-utils": "2.13.1",
    "@swc/core": "1.5.7",
    "@swc/jest": "0.2.39",
    "@types/ajv": "^0.0.5",
    "@types/jest": "30.0.0",
    "@types/jsonwebtoken": "^9.0.10",
    "@types/node": "^22.0.0",
    "@types/nodemailer": "^7.0.4",
    "@types/react": "^18.3.2",
    "@types/react-dom": "^18.2.25",
    "jest": "30.2.0",
    "react": "^18.2.0",
    "react-dom": "^18.2.0",
    "ts-node": "^10.9.2",
    "typescript": "5.9.3",
    "vite": "^5.4.21",
    "yalc": "^1.0.0-pre.53"
  },
  "optionalDependencies": {
    "@biomejs/cli-linux-x64-musl": "2.0.6",
    "@rollup/rollup-darwin-arm64": "4.43.0",
    "@rollup/rollup-darwin-x64": "4.43.0",
    "@rollup/rollup-linux-arm64-gnu": "4.43.0",
    "@rollup/rollup-linux-arm64-musl": "4.43.0",
    "@rollup/rollup-linux-x64-musl": "4.43.0"
  },
  "engines": {
    "node": ">=24.1.0"
  },
  "volta": {
    "node": "24.1.0",
    "yarn": "4.12.0"
  },
  "overrides": {
    "axios": "1.13.5",
    "glob": "11.1.0",
    "jws": "4.0.1",
    "multer": "2.0.2",
    "qs": "6.14.1",
    "tar": "7.5.8",
    "@isaacs/brace-expansion": "5.0.1",
    "fast-xml-parser": "5.3.6",
    "minimatch@^10.1.1": "10.2.1"
  },
  "resolutions": {
    "tar": "7.5.8",
    "@isaacs/brace-expansion": "5.0.1",
    "fast-xml-parser": "5.3.6",
    "axios": "1.13.5",
    "minimatch@^10.1.1": "10.2.1"
  },
  "packageManager": "yarn@4.12.0"
}

The user provided an example of a cart object, demonstrating the discrepancy where created_at and updated_at are identical despite items being added:

{
    "id": "cart_01KNRQGM7A11Y6FJFQ5WJCQ1K1",
    "currency_code": "eur",
    "email": null,
    "locale": null,
    "region_id": "reg_01JYH2ECBAQQHTWX8WDZZNHXKE",
    "created_at": "2026-04-09T09:00:03.691Z",
    "updated_at": "2026-04-09T09:00:03.691Z",
    "completed_at": null,
    "total": 4.2,
    "subtotal": 4.2,
    "tax_total": 0,
    "discount_total": 0,
    "discount_subtotal": 0,
    "discount_tax_total": 0,
    "original_total": 4.2,
    "original_tax_total": 0,
    "item_total": 4.2,
    "item_subtotal": 4.2,
    "item_tax_total": 0,
    "item_discount_total": 0,
    "original_item_total": 4.2,
    "original_item_subtotal": 4.2,
    "original_item_tax_total": 0,
    "shipping_total": 0,
    "shipping_subtotal": 0,
    "shipping_tax_total": 0,
    "shipping_discount_total": 0,
    "original_shipping_tax_total": 0,
    "original_shipping_subtotal": 0,
    "original_shipping_total": 0,
    "credit_line_subtotal": 0,
    "credit_line_tax_total": 0,
    "credit_line_total": 0,
    "metadata": {
        "context_store_id": "00138"
    },
    "sales_channel_id": "sc_01JY45QYED82PHGXS1B2EZFJM3",
    "customer_id": null,
    "items": [
        {
            "id": "cali_01KNRQGMJ1NTDWWJJ897VAXJ9R",
            "title": "Rehua 33 cl",
            "subtitle": "",
            "thumbnail": "https://s3.eu-central-1.amazonaws.com/medusajs.cloud-data-prod-euc1-20241127132538579500000002/edf17f2105859f73c8a/BCA062428-1-01K7S3PFN786HHR8N8S36GBRF6.png",
            "quantity": 1,
            "variant_id": "variant_01K7S3PHS7TRJ7Z0SPQ4TEW022",
            "product_id": "prod_01K7S3PHP2RJV8J1M2CA4JYMPT",
            "product_title": "Rehua 33 cl",
            "product_description": "Rehua est New-Zealand NEIPA mettant à l'honneur les houblons aromatiques du pacifique sud.",
            "product_subtitle": null,
            "product_type": "TVA_20",
            "product_type_id": "ptyp_01KG4J7FFNNKAFWQFXGKPG56PD",
            "product_collection": null,
            "product_handle": "rehua-33-cl",
            "variant_sku": "BCA062428",
            "variant_barcode": null,
            "variant_title": "",
            "variant_option_values": null,
            "requires_shipping": true,
            "is_discountable": true,
            "is_giftcard": false,
            "is_tax_inclusive": true,
            "is_custom_price": false,
            "metadata": {
                "returnable_id": null
            },
            "cart_id": "cart_01KNRQGM7A11Y6FJFQ5WJCQ1K1",
            "raw_compare_at_unit_price": null,
            "raw_unit_price": {
                "value": "4.2",
                "precision": 20
            },
            "created_at": "2026-04-09T09:00:04.034Z",
            "updated_at": "2026-04-09T09:00:04.034Z",
            "deleted_at": null,
            "adjustments": [],
            "tax_lines": [],
            "compare_at_unit_price": null,
            "unit_price": 4.2,
            "subtotal": 4.2,
            "total": 4.2,
            "original_subtotal": 4.2,
            "original_total": 4.2,
            "discount_subtotal": 0,
            "discount_tax_total": 0,
            "discount_total": 0,
            "tax_total": 0,
            "original_tax_total": 0,
            "raw_subtotal": {
                "value": "4.2",
                "precision": 20
            },
            "raw_total": {
                "value": "4.2",
                "precision": 20
            },
            "raw_original_subtotal": {
                "value": "4.2",
                "precision": 20
            },
            "raw_original_total": {
                "value": "4.2",
                "precision": 20
            },
            "raw_discount_subtotal": {
                "value": "0",
                "precision": 20
            },
            "raw_discount_tax_total": {
                "value": "0",
                "precision": 20
            },
            "raw_discount_total": {
                "value": "0",
                "precision": 20
            },
            "raw_tax_total": {
                "value": "0",
                "precision": 20
            },
            "raw_original_tax_total": {
                "value": "0",
                "precision": 20
            },
            "product": {
                "id": "prod_01K7S3PHP2RJV8J1M2CA4JYMPT",
                "title": "Rehua 33 cl",
                "handle": "rehua-33-cl",
                "subtitle": null,
                "description": "Rehua est New-Zealand NEIPA mettant à l'honneur les houblons aromatiques du pacifique sud.",
                "is_giftcard": false,
                "status": "published",
                "thumbnail": "xxxxxxxxx",
                "weight": null,
                "length": null,
                "height": null,
                "width": null,
                "origin_country": "France",
                "hs_code": null,
                "mid_code": null,
                "material": null,
                "discountable": true,
                "external_id": "xxxxxxxxxxx",
                "metadata": {},
                "type_id": "ptyp_01KG4J7FFNNKAFWQFXGKPG56PD",
                "type": {
                    "id": "ptyp_01KG4J7FFNNKAFWQFXGKPG56PD"
                },
                "collection_id": null,
                "collection": null,
                "created_at": "2025-10-17T12:53:15.075Z",
                "updated_at": "2026-03-11T16:29:31.001Z",
                "deleted_at": null,
                "tags": [],
                "categories": [
                    {
                        "id": "pcat_01K5XGMNGNVGYFXXK72W40YWS2",
                        "name": "Blonde",
                        "description": "",
                        "handle": "biere-blonde",
                        "mpath": "pcat_01K5XGKG9MG96R7JJCK40GGQPS.pcat_01K5XGMMDVN0DJH3WSNVYWW1A8.pcat_01K5XGMNGNVGYFXXK72W40YWS2",
                        "is_active": true,
                        "is_internal": false,
                        "rank": 1,
                        "metadata": null,
                        "parent_category_id": "pcat_01K5XGMMDVN0DJH3WSNVYWW1A8",
                        "parent_category": {
                            "id": "pcat_01K5XGMMDVN0DJH3WSNVYWW1A8",
                            "name": "Bière",
                            "description": "",
                            "handle": "biere",
                            "mpath": "pcat_01K5XGKG9MG96R7JJCK40GGQPS.pcat_01K5XGMMDVN0DJH3WSNVYWW1A8",
                            "is_active": true,
                            "is_internal": false,
                            "rank": 0,
                            "metadata": null,
                            "parent_category_id": "pcat_01K5XGKG9MG96R7JJCK40GGQPS",
                            "created_at": "2025-09-24T09:24:57.916Z",
                            "updated_at": "2025-09-24T09:24:57.916Z",
                            "deleted_at": null
                        },
                        "created_at": "2025-09-24T09:24:59.029Z",
                        "updated_at": "2025-09-24T12:41:21.167Z",
                        "deleted_at": null
                    }
                ]
            },
            "variant": {
                "id": "variant_01K7S3PHS7TRJ7Z0SPQ4TEW022",
                "title": "",
                "

This snippet clearly shows the created_at and updated_at for the cart itself are identical (2026-04-09T09:00:03.691Z), even though a line item was added with its own created_at and updated_at at 2026-04-09T09:00:04.034Z, indicating a change within the cart that wasn't propagated to the cart's main timestamp.

Community Best Practices and Next Steps

While a definitive solution or fix for this specific behavior is still anticipated, the ESHOPMAN community acknowledges the importance of this issue. For developers and merchants, it's crucial to be aware of this nuance when designing abandoned cart strategies or data synchronization processes. Until a platform update addresses this, potential workarounds might involve:

  • Implementing custom logic that explicitly updates a cart's metadata field with a timestamp on relevant actions via the "Update Cart" endpoint, if possible, to serve as a proxy for activity.
  • Adjusting abandoned cart workflows in HubSpot to consider line item updated_at timestamps or other signals of cart activity, rather than solely relying on the primary cart updated_at.

This discussion underscores the value of the ESHOPMAN community in identifying and addressing platform behaviors. Staying informed on such technical details ensures that your ESHOPMAN storefront, integrated with HubSpot, operates with the highest data integrity and efficiency.

Start with the tools

Explore migration tools

See options, compare methods, and pick the path that fits your store.

Explore migration tools