Create add-ons for Google Sheets, Docs, Slides, or Forms, automate your workflow, integrate with external APIs, and more.

Many Google apps, one platform in the cloud

Increase the power of your favorite Google apps — like Calendar, Docs, Drive, Gmail, Sheets, and Slides.
Apps Script lets you do more with Google, all on a JavaScript platform in the cloud.

Teach yourself Apps Script

Learn Apps Script fundamentals with codelabs

Explore a playlist of guided codelab tutorials that teach you the basics of Apps Script with Google Sheets.

Try a 5-minute quickstart

After exploring the codelab playlist, try one of our quickstarts to quickly build a working script project. Create menus and custom functions in Google Sheets, manage responses in Google Forms, or create a basic Google Docs add-on or Hangouts Chat bot!
Custom functions in Sheets Manage Forms responses
Build a Docs add-on Build a Hangouts Chat bot

Build add-ons to extend Google Sheets, Docs, Slides, Forms, and Gmail

Desktop add-ons for Docs, Sheets, Slides, and Forms

Apps Script makes it easy to create and publish add-ons in an online store for Google Sheets, Docs, Slides, and Forms. There’s no better way to distribute scripts to large numbers of users, whether you want to ship your code to the whole world or keep it private to the users in your G Suite domain.

Desktop and mobile add-ons for Gmail

You can also build add-ons that extend Gmail on both desktop and mobile. Since you build Gmail add-ons with a card and widget library, you don't need to build separate UIs for desktop and mobile clients.

A living, breathing platform (well, metaphorically)

December 6, 2019

A new Apps Script Fundamentals codelab playlist has been created. This playlist walks new users through basic Apps Script concepts as they build scripts for Google Sheets.

November 6, 2019

October 28, 2019

You can no longer publish web apps to the Chrome Web Store. The Chrome Web Store deprecated Chrome apps in 2016 and they are now only available for ChromeOS devices. This change includes published Apps Script web apps. Previously published web apps are no longer discoverable in the Chrome Web Store. Editor add-ons aren't affected; you can still publish editor add-ons to the Chrome Web Store.

October 23, 2019

  • The Slides service class RgbColor and the enumeration ColorType have been moved from the Slides service to the Base script service. The functionality of these classes has not changed. Moving these classes to the Base script service enables other services to make use of them in the future. You can now find the documenation for these classes at RgbColor and ColorType.
  • Several classes and methods relating to the now shutdown UiApp service have been removed. Most of these methods involved interactions between the Charts service and UiApp that were very seldom used. The following is a full list of the removed classes and methods:
    • Charts service
      • CategoryFilterBuilder
      • Control
      • DashboardPanel
      • DashboardPanelBuilder
      • Chart.getId()
      • Chart.getType()
      • Charts.newCategoryFilter()
      • Charts.newDashboardPanel()
      • Charts.newNumberRangeFilter()
      • Charts.newStringFilter()
      • NumberRangeFilterBuilder.setDataTable(tableBuilder)
      • NumberRangeFilterBuilder.setDataTable(table)
      • NumberRangeFilterBuilder.setFilterColumnIndex(columnIndex)
      • NumberRangeFilterBuilder.setFilterColumnLabel(columnLabel)
      • NumberRangeFilterBuilder.setLabel(label)
      • NumberRangeFilterBuilder.setLabelSeparator(labelSeparator)
      • NumberRangeFilterBuilder.setLabelStacking(orientation)
      • StringFilterBuilder.setDataTable(tableBuilder)
      • StringFilterBuilder.setDataTable(table)
      • StringFilterBuilder.setFilterColumnIndex(columnIndex)
      • StringFilterBuilder.setFilterColumnLabel(columnLabel)
      • StringFilterBuilder.setLabel(label)
      • StringFilterBuilder.setLabelSeparator(labelSeparator)
      • StringFilterBuilder.setLabelStacking(orientation)
    • Spreadsheet service
      • EmbeddedChart.getId()
      • EmbeddedChart.getType()
      • EmbeddedChart.setId(id)