#lastfm #scrobble #api #last-fm


Fork of rustfm-scrobble, a Last.fm Scrobble crate, adding proxy support

3 stable releases

2.0.0 Jul 13, 2023
1.1.3 Nov 16, 2022
1.1.2 Jul 19, 2022

#65 in Multimedia

Download history 97/week @ 2023-11-04 104/week @ 2023-11-11 78/week @ 2023-11-18 131/week @ 2023-11-25 92/week @ 2023-12-02 98/week @ 2023-12-09 104/week @ 2023-12-16 94/week @ 2023-12-23 108/week @ 2023-12-30 102/week @ 2024-01-06 91/week @ 2024-01-13 92/week @ 2024-01-20 166/week @ 2024-01-27 101/week @ 2024-02-03 118/week @ 2024-02-10 161/week @ 2024-02-17

564 downloads per month
Used in rescrobbled

MIT license

973 lines


Latest Version

rustfm-scrobble-proxy is a fork of rustfm-scrobble. Its API is (mostly) identical, but it replaces the internal ureq HTTP client with attohttpc. This allows the library to be used behind a proxy seamlessly, as attohttpc picks up proxy settings automatically, unlike ureq. In addition, scrobbling tracks without an album is now allowed.

To see all changes, see the CHANGELOG.md file. The fork happened in version 1.1.2.

rustfm-scrobble is licensed under the MIT license. See the LICENSE file for more information. Below is the original README.

rustfm-scrobble is a Last.fm Scrobble API 2.0 crate for Rust. It allows easy acccess to the "scrobble" and "now playing" notification endpoints through a simple Rust API. It can be used to record song-plays from music players, build analog scrobbling tools similar to VinylScrobbler or work with IoT Devices. It was initially built to implement a Spotify scrobbling service using the Spotify Connect Protocol when the Alexa Spotify client did not support scrobbling plays to Last.fm.


  • Scrobble songs to Last.fm ('scrobble' API endpoint)
  • Publish now-playing song to Last.fm ('now playing' API endpoint)
  • Batch scrobble support in Scrobbler::scrobble_batch and ScrobbleBatch
  • Multiple authentication flows to gain permissions to publish to Last.fm user profile
    • Store a pre-authenticated session key & throw away secret data after initial authentication
  • Simple error handling; each API operation returns a Result with a simple Error type on failure
  • Unit tested


Add rustfm-scrobble to your Cargo.toml.



  • API Documentation
  • Code Examples
    • Example now-playing & scrobbling client
    • Example batch scrobbling client
    • cargo build --examples
    • ./target/debug/examples/example
  • Build: cargo build
  • Run Unit tests: cargo test
extern crate rustfm_scrobble;
use rustfm_scrobble::{Scrobble, Scrobbler};

let username = "last-fm-username";
let password = "last-fm-password";
let api_key = "client-api-key";
let api_secret = "client-api-secret";
let mut scrobbler = Scrobbler::new(api_key, api_secret);
scrobbler.authenticate_with_password(username, password);
let song = Scrobble::new("Example Artist", "Example Song", "Example Album");

In Use

rustfm-scrobble is used in several projects including polaris, connectr, rescrobbled and rb-scrobbler.


The API is stable & backwards compatibility will be guaranteed for all 1.0 releases.


MIT license, see ./LICENSE.


~123K SLoC