Skip to content

Admin Activity Audit Log

Magento 2.4.7 – 2.4.9 Luma Hyvä

When more than one person works in the admin panel, "who changed the price, disabled the product, or edited that setting – and when" becomes guesswork. Adobe Commerce answers this with its built-in Action Logs; Magento Open Source ships nothing comparable. Admin Activity Log, an extension for Magento Open Source and Adobe Commerce, fills that gap.

The extension records every change an administrator makes – through the admin panel and through the admin REST API – with a field-level before/after diff. A dedicated Action Log grid shows who did what, when, from which IP and through which channel, with filters and export. Open any record to see the exact fields that changed, old value beside new. Configuration is covered the same way: every setting saved under Stores → Configuration is recorded as one before/after pair, and settings stored encrypted or under a sensitive path are recorded masked.

Change history is also surfaced where merchants work: a collapsible panel on the product, customer, category, CMS page and CMS block edit pages, and a tab on the order view and on the admin user form, show the history of that specific record. Invoices, shipments and credit memos are recorded as they are issued, and the order's tab lists them beside the order's own changes. The administrator's own tab answers both questions a merchant asks about a colleague: what was changed on that account, and what that account changed everywhere else. A Login Attempts grid records successful and failed admin logins with IP and reason, and an Active Sessions grid lets you see and force-terminate any live admin session. A configurable retention period with a daily cron purge keeps the log within your data-minimization policy.

Admin Activity Log is read-only by design: it keeps its own journal and never writes to your catalogue, customers, orders or configuration – the only action it performs outside its own tables is ending an admin session on request. It is rule-based, deterministic and on-premise: it sends no data off-site, uses no external services and, unlike the platform's own admin usage tracking, keeps every record inside your store. Values of sensitive fields – passwords, secrets, API keys, tokens, and any pattern you add – are always stored masked.

Key Features

  • Field-level audit log of every admin change (old value beside new)
  • Coverage of both the admin panel and the admin REST API
  • Configuration audit: every setting change as one before/after pair, encrypted and sensitive settings masked
  • Change history on product, customer, category, CMS page, CMS block, order and admin user pages
  • Login Attempts grid (success / failure, IP, user agent, reason)
  • Active Sessions grid with force-terminate
  • Sensitive fields (passwords, secrets, API keys, tokens, your own patterns) stored masked
  • Read-only by design: never writes to catalogue, customer, order or configuration data
  • Configurable retention with a daily auto-purge cron
  • Entity-type and field exclusion, plus a per-record field cap, for noise control
  • Five ACL resources for duty separation
  • On-premise and deterministic: no telemetry, no external calls
  • An integration event for wiring your own notifications

Versions

v1.0.1 Sep 03, 2026

See CHANGELOG.public.md. 1.0.1 is a diff-quality release: the record page names the store view a change belongs to (All Store Views, the store view's name and code, or Not store-scoped – never collapsed); a save made in one store view no longer reports the fields it inherited, and no save reports a value that merely changed its spelling – numeric formats, re-encoded lists, empty against not set; Magento's own permission refresh is no longer logged as an administrator's change; and Exclude Fields keeps its shipped list current across upgrades through "Use system value".

1.0.0 widens where the audit trail is visible: invoices, shipments and credit memos are logged as they are issued and listed on the order's tab beside the order's own changes; Change History reaches the category, CMS page and CMS block edit forms; and the admin user form gains a tab with both axes of an administrator's history – what was changed on that account, and what that account changed everywhere else, matched by account ID. A record opened from any of these offers a button back to the record it belongs to. The duplicated "Action" column header is corrected, and a record with no field changes is no longer a dead end.

0.2.0 removed per-field rollback – the extension is now read-only against merchant data – and closes three gaps in configuration logging: a changed setting is recorded with its real previous value (only newly created settings were before), one before/after pair per setting instead of the form's transport rows, and settings stored encrypted are recorded (masked) at all. Sensitive-field patterns are now extendable in the configuration, the built-in ones cannot be removed, and the masking decision is taken before a value is read into the diff. The configuration pane carries the vendor banner with the installed version. 0.1.1 was packaging only; 0.1.0 was the first release.

FAQ

When more than one person has admin access, the question "who changed this price, disabled this product, or edited that setting – and when" has no answer in Magento Open Source. Adobe Commerce ships Action Logs for exactly this; Open Source ships nothing comparable, so the answer is usually reconstructed from memory, from Slack, or not at all.

Admin Activity Log records every change an administrator makes, with the old and the new value of each field that moved. The reconstruction stops being a conversation and becomes a grid you can filter, open and export.

  • More than one administrator. Two people and a shared login are enough for the question to come up; an agency, a contractor or a seasonal hire makes it routine.
  • Integrations write to your store. Anything using an admin token – an ERP, a PIM, a middleware sync – is logged through the same journal as the admin panel, with the channel recorded, so a change nobody remembers making can be traced to the system that made it.
  • Configuration is the part you cannot afford to guess about. Payment, shipping and tax settings are recorded one before/after pair per setting, and credentials are recorded masked.
  • You have a data-retention policy. A configurable period and a daily purge keep the journal inside it without anyone remembering to clean up.
  • You need to undo changes, not see them. This extension does not restore anything – see the last question. If reverting a bad edit in one click is the requirement, buy an extension built around that, not this one.
  • You are the only administrator. A journal of your own actions is a filing cabinet for one person; the value here is attribution.
  • The changes you care about come from the command line, cron or an import feed. Those paths are not covered in this version.
  • You are on Adobe Commerce and already use Action Logs. The platform covers this; you would be paying twice. The extension installs on Adobe Commerce and works there, but it earns its price on Open Source.
  • An Action Log grid of every recorded change: date, user, role, action, entity type and id, the channel it came through, and the IP. Filterable on each of those, and exportable.
  • A field-level diff on every record – old value beside new, for each field that actually changed. A save made in one store view reports only the fields the person edited, not the ones the store keeps inheriting, and a value that merely changed its spelling (10.000000 against 10.00) is not a change. The record names the store view the change belongs to – All Store Views, one store view by name, or "not store-scoped" for records without a store dimension.
  • Configuration auditing – one before/after pair per setting, with the scope named when a value is saved at website or store-view level.
  • Order documents – invoices, shipments and credit memos are logged as they are issued: who issued the document, from the admin panel or over the REST API, and every value it was created with.
  • Change History where you work – on the product, customer, category, CMS page and CMS block edit forms, a tab on the order view that lists the order's documents beside its own changes, and a tab on the admin user form with two sections: what was changed on that account and by whom, and what that administrator changed everywhere else. Each entry links to the full diff, and the diff offers a button back to the record it was opened from.
  • Login Attempts – successful and failed admin logins with IP, user agent and the reason a failure failed.
  • Active Sessions – every live admin session, with force-termination.
  • Credential masking – six built-in patterns (password, secret, api_key, private_key, access_token, rp_token) that cannot be switched off, plus any pattern you add. Masked values are stored masked, not hidden at display time.
  • Retention – a daily cron purge with a configurable period.
  • Five ACL resources, so viewing the log, viewing logins, viewing sessions, terminating them and editing the settings are five separate grants.
  • One integration event, so your own code can send an email or a Slack message when something is recorded.
  • It does not roll back or restore anything. This extension had one-click restore and removed it in 0.2.0. A restore could not tell whether the record had been changed again since, and fields written by the system rather than by the admin form never enter the journal, so it restored part of a record while appearing to restore all of it. The extension is read-only by design: it writes to its own three tables and, on request, ends an admin session. Nothing else.
  • It does not log the command line, cron jobs or data imports. Only the admin panel and the admin REST API.
  • It does not log integration or customer tokens – only admin tokens, by design, so an integration's own traffic does not drown the journal.
  • It does not watch the storefront. Customer behaviour, orders placed and front-end activity are outside its scope.
  • It does not record page visits. It records changes; which admin pages someone opened without changing anything is not in the journal, so the journal stays readable.
  • It does not send alerts by itself. It dispatches one event; the message is your code's to send.
  • It needs the config cache type enabled – as production always has it – for configuration changes to be recorded. With that cache off, the previous value is read from the database inside the save itself and the change looks like no change.

Reviews

No reviews yet. Be the first to share your experience.

Sign in to write a review.