Skip to content
Access the Gmail RESTful API from R.
Branch: master
Clone or download


Build Status Coverage Status

Exposing the Gmail API from R.


Get the released version from CRAN:


Or the development version from github with:

# install.packages("devtools")


  • retrieve data from your email
    • drafts: my_drafts = drafts()
    • history: my_history = history(start_num)
    • labels: my_labels = labels()
    • messages: my_messages = messages("search query")
    • threads: my_threads = threads("search query")
  • Create and send emails and drafts: see sending_messages vignette
  • manage email labels programmatically: modify_thread(thread_id, add_labels=c("label_1"), remove_labels=c("label_2"))
  • put things in the gmail trash
    • messages: trash_message(message_id)
    • threads: trash_thread(thread_id)
  • take things out of the gmail trash
    • messages: untrash_message(message_id)
    • threads: untrash_thread(thread_id)
  • delete directly without using the trash
    • messages: delete_message(message_id)
    • threads: delete_thread(thread_id)


By default gmailr will use a global project. However if you are going to be a heavy user and will do a lot of queries please setup your own project with the steps below. This often works best via Google Chrome.

  • Pick a project name; referred to as PROJ-NAME from now on.

  • Register a new project at

  • From Overview screen, look at Google Apps APIs and select the Gmail API. Enable it.

  • Click "Go to Credentials" or navigate directly to Credentials.

  • You want a get a client ID and will need to "Configure consent screen".

    • The email should be pre-filled. Enter PROJ-NAME as Product name. Other fields can be left blank.
  • Returning to the "client id" process:

    • Application Type: "Other"
    • Enter PROJ-NAME again as the name.
    • Click "Create"
  • Client id and secret will appear in a pop-up which you can dismiss via "OK". Instead use download icon at far right of your project's listing to download a JSON file with all of this info. Move to an appropriate location and consider renaming as PROJ-NAME.json.

  • Use the downloaded JSON file as input to use_secret_file(), prior to other gmailr calls.


Future Work

  • More unit tests and better coverage
  • More (complicated) examples
  • Email statistics
  • Programmatic emailing
  • Returning data frames in addition to native Gmail API objects which are usually a nested list.
  • Support all the formats of users.messages:get


Privacy policy


You can’t perform that action at this time.