Sometimes, you may need to delete some or all Visits log data for a given date, and/or a given website. For example if you have imported log files incorrectly in Matomo (Piwik) you may want to delete the invalid data that was imported.

Delete visits using the UI

As part of the GDPR Privacy features in Matomo, you can easily delete visits. Learn more in the FAQ How do I delete rows of a report and specific visits to clean-up some of the reporting data? and in the guide: GDPR Guide “Right to erasure”.

Delete visits using a console command

A console command lets you delete all visits log data (including Visits, Actions, Goal conversions, Ecommerce activity).

To use this console command, login to your server (using SSH) and go in the Matomo directory. Execute the following command to display the help:

./console help core:delete-logs-data

The following options are available:

  • --dates lets you delete log data with a date within this date range. Eg, 2012-01-01,2013-01-01
  • --idsite lets you delete log data belonging to the site with this ID. Comma separated list of website id. Eg, 1, 2, 3, etc. By default log data from all sites is purged.
  • --limit lets you pick the number of rows to delete at a time. The larger the number, the more time is spent deleting logs, and the less progress will be printed to the screen. (default: 1000)

For example to delete all log data for month of January 2015 on website ID 42, execute:

./console core:delete-logs-data --dates=2015-01-01,2015-02-01 --idsite=42

Notes:

  • all the visits log data for the given date range and website ID will be permanently deleted.
  • When a date range is entered (comma separated), the time will be set to the beginning of the day (midnight UTC) so for example using --dates=2015-01-01,2015-01-02 will delete all the data only for the 1st of January 2015 (in UTC timezone).
  • The core:delete-logs-data command uses UTC when deleting log data, so you will need to adjust the command depending on the time zone that your website uses. To delete the data for a specific day for a website that is UTC +4 for example, you will use the following --dates parameter to delete data for the specific day of 1 January 2015 (in UTC+4 in this example): --dates="2014-12-31 20:00:00,2015-01-01 20:00:00"
  • this console command does not delete your archived report data but only delete the raw visits log data.

Delete visits using SQL query

Run the following SQL query to delete visits matching a certain criteria, for example here we delete all visits where the screen resolution wasn’t tracked properly in the date range 2019 May 1st-May 16th:

DELETE log_visit, log_link_visit_action, log_conversion, log_conversion_item 
FROM log_visit 
LEFT JOIN log_link_visit_action ON log_visit.idvisit = log_link_visit_action.idvisit 
LEFT JOIN log_action ON log_action.idaction = log_link_visit_action.idaction_url 
LEFT JOIN log_conversion ON log_visit.idvisit = log_conversion.idvisit 
    LEFT JOIN matomo_log_conversion_item ON log_visit.idvisit = log_conversion_item.idvisit
WHERE config_resolution = 'unknown' 
AND visit_last_action_time >= '2019-05-01' 
AND visit_last_action_time <= '2019-05-16';

or delete all data for a given website:

    DELETE log_visit, log_link_visit_action, log_conversion, log_conversion_item
    FROM log_visit
    LEFT JOIN log_link_visit_action ON log_visit.idvisit = log_link_visit_action.idvisit
    LEFT JOIN log_action ON log_action.idaction = log_link_visit_action.idaction_url
    LEFT JOIN log_conversion ON log_visit.idvisit = log_conversion.idvisit
    LEFT JOIN log_conversion_item ON log_visit.idvisit = log_conversion_item.idvisit
    WHERE log_visit.idsite = X;

Delete actions (pageviews, events…) using a SQL query

Run the following SQL query to delete all actions, in this example all Events, where the “Event action” matches a certain string (in this example my-event-action-to-delete:

    DELETE llva.* 
    FROM matomo_log_link_visit_action llva 
    JOIN matomo_log_action as la  
    WHERE llva.idaction_event_action = la.idaction  
    AND la.name LIKE '%my-event-action-to-delete%';

Or for example, if you tracked in the past some custom events with some bogus data (say an event value that is too large), then you can delete the bogus event actions by running the following SQL queries:

    # First, check the data that will be deleted
    SELECT * FROM matomo_log_link_visit_action WHERE custom_float >= 99999999
    # Then delete the data
    DELETE * FROM matomo_log_link_visit_action WHERE custom_float >= 99999999

Or for example to delete any site searches tracked before a certain date (type = 8 is for site searches, see DB schema reference and TYPE_SITE_SEARCH for other action types):

    DELETE matomo_log_action 
    FROM matomo_log_link_visit_action 
      LEFT JOIN matomo_log_action ON idaction_name=idaction 
    WHERE type=8
      AND server_time < "2020-06-01";

Related FAQs

If you want to configure Matomo to automatically purge your old data (whether visits log data, or statistics reports data), see this FAQ How do I delete historical Matomo data? (purge old logs and/or old processed reports)

If you want to delete old reports, read this FAQ: How do I delete all statistics for a given website, or for all websites?

Previous FAQ: How do I get the DB-IP databases or Maxmind GeoIp2 to improve accuracy of Country detection, and detect visitors’ Cities and Regions?