Import from Listening History Files also counting song skips as listens

Hi! I just used the new Import from Listening History Files feature to import my Spotify Extended History, and it looks like it’s also counted times where I’ve skipped a song as a listen.

For example, here’s one of the json entries in the extended history export:

Spotify Extended History JSON entry
  {
    "ts": "2018-01-31T21:56:27Z",
    "platform": "iOS 11.0.3 (iPhone8,4)",
    "ms_played": 7244,
    "conn_country": "US",
    "ip_addr": "23.226.132.228",
    "master_metadata_track_name": "Mountain Sound",
    "master_metadata_album_artist_name": "Of Monsters and Men",
    "master_metadata_album_album_name": "My Head Is An Animal",
    "spotify_track_uri": "spotify:track:60ZGteAEtPCnGE6zevgUcd",
    "episode_name": null,
    "episode_show_name": null,
    "spotify_episode_uri": null,
    "reason_start": "clickrow",
    "reason_end": "fwdbtn",
    "shuffle": true,
    "skipped": false,
    "offline": false,
    "offline_timestamp": null,
    "incognito_mode": false
  }

As you can see by "ms_played": 7244 and "reason_end": "fwdbtn", this song played for just over 7 seconds and then I skipped it with the forward button. Obviously this shouldn’t count as a listen, but it has:

ListenBrainz inspect listen details
{
  "inserted_at": 1756756096,
  "listened_at": 1517435787,
  "recording_msid": "16978791-e1e3-4119-bf93-003d13323b70",
  "track_metadata": {
    "additional_info": {
      "duration_ms": 211453,
      "ms_played": 7244,
      "music_service": "spotify.com",
      "origin_url": "https://open.spotify.com/track/60ZGteAEtPCnGE6zevgUcd",
      "recording_msid": "16978791-e1e3-4119-bf93-003d13323b70",
      "release_artist_name": "Of Monsters and Men",
      "spotify_album_artist_ids": [
        "https://open.spotify.com/artist/4dwdTW1Lfiq0cM8nBAqIIz"
      ],
      "spotify_album_id": "https://open.spotify.com/album/6uD3oJCWT1gtlSCg5lDiNF",
      "spotify_artist_ids": [
        "https://open.spotify.com/artist/4dwdTW1Lfiq0cM8nBAqIIz"
      ],
      "submission_client": "ListenBrainz Archive Importer",
      "tracknumber": 3
    },
    "artist_name": "Of Monsters and Men",
    "mbid_mapping": {
      "artist_mbids": [
        "9e103f85-7af7-41d7-b83b-49ba8f0c5abf"
      ],
      "artists": [
        {
          "artist_credit_name": "Of Monsters and Men",
          "artist_mbid": "9e103f85-7af7-41d7-b83b-49ba8f0c5abf",
          "join_phrase": ""
        }
      ],
      "caa_id": 39945918593,
      "caa_release_mbid": "c5d666a6-35b4-4d6f-b817-a81775688670",
      "recording_mbid": "6b73ebcd-b49b-4583-b697-57287e4003fd",
      "recording_name": "Mountain Sound",
      "release_mbid": "255c3fd4-156e-4a2b-81cc-0aa632d8efad"
    },
    "release_name": "My Head Is An Animal",
    "track_name": "Mountain Sound"
  },
  "user_name": "thatcactusgirl"
}

I can see that the song duration and the ms played are recorded in the inspect listen details, so will these imported “skips” be deleted later in a batch? If that’s the case, I think users need some notice that that’s the process. I can be patient if I’m told to be :grin:. I just want to make sure I didn’t ruin my listens and stats with >13K might-be-might-not-be-listens

6 Likes

This gives me a cold shiver… potentially 13K bad listens spread throughout the history! Ouch!

I don’t think this is something that will be auto-filtered (but would love to be corrected on that). This should probably be addressed so it doesn’t happen - the LB dev team will be able to say more, but possibly we should store Spotify’s “reason_end” in our listen data, since it seems that with that and “ms_played” we should be able to muck about until we get a good threshold for what to not count as a listen.

One good thing though - I think it may be possible to filter and delete these listens yourself, using @kellnerd’s ‘elbisaur’ tool?

1 Like

I think it makes sense to filter those with some sensible default. That is ignore skipped tracks unless they have been listened to for a certain duration.

E.g. the submission guidelines say:

Listens should be submitted for tracks when the user has listened to half the track or 4 minutes of the track, whichever is lower.

Now the export files don’t tel the duration of the tracks. But I think we could still have some minimum default playback time. My own scotty tool by default records skipped tracks if they have been listened to for more than 30 seconds. Not fully sure how I came up with that, though, could maybe be higher, but the user can configure it.

Another thing is that the user can have listens on Spotify in incognito mode. I think those also shouldn’t be imported, at least not by default.

5 Likes

Thanks for reporting this, we are working on adding additional filtering for skipped tracks, incognito more and other should-be-skipped scenarios

4 Likes

The PR for the fix has been merged and the changes would be deployed soon in the next release!

Thanks for reporting this critical issue.

4 Likes

That’s awesome, how do we know when the change is deployed? I’d like to know before importing my extended history as well

1 Like

I suppose the best way is to look out for new releases or subscribe to the Atom/RSS feed:

If you know the PR number you can use it to filter the releases page.

For this specific fix, it was released on the 3rd in Release v-2025-09-03.0 · metabrainz/listenbrainz-server · GitHub
It’s in there in the notes at the very bottom, which is not the clearest if I’m honest!

2 Likes