Troubleshooting API Requests
While using the API Connector add-on for Google Sheets, there may be cases where your API request doesn’t work, or returns an error message. This article will describe some known issues and ways to troubleshoot issues with your API requests.
- Add-on Buttons & Menus Don’t Work
- Authorization Errors
- Columns Shifting
- Error Messages
- Incorrect Content-Type
- Missing Records (Pagination)
- Non-JSON/CSV/XML Response Types
- Pro Account Not Recognized
- Rate Limits
- Quotas and Limits
- Request Form Syntax Errors
- Requests Timing Out
- Restricted User Agent
- Restricted IP Address
- Scheduling Issues
- Un-even/Mismatched Output Rows
Add-on Buttons & Menus Don’t Work
If you’re having issues with unresponsive or frozen buttons and menus, this indicates a problem with your browser. Browsers like Brave, certain ad blockers, cookie settings, and other extensions may prevent API Connector from functioning normally.
To resolve, run through the following suggestions. The exact cause of the issue depends on your browser, so you may need to try multiple suggestions from this list until your add-on works normally. However, the first bullet is the most likely cause, so please start there!
https://[*.]googleusercontent.comin the input box. Reload your sheet after making the change.
- disable all extensions and re-run. In Chrome, you can view all your browser extensions by clicking the three-dot menu in the top right of your browser and navigating to More tools > Extensions.
- Clear cache and cookies:
- run the add-on in incognito/private browser mode.
- run the add-on in another browser.
For Safari, it is possible to encounter an issue where the entire add-on interface is blank or doesn’t load. The same issue in Chrome would result in a ‘drive.google.com refused to connect’ error message, and an image like this:
This is a bug on Google’s side related to being logged into multiple Google accounts at the same time. To resolve, log out from all Google accounts and log back in first with the account you’re using with Google Sheets (you can log back into your other accounts after) or re-open Sheets + API Connector in a new incognito window.
Make sure you’ve entered any required authorization credentials into the Headers table, and that you’ve encoded them to Base 64 if basic access authentication is required.
API Connector displays fields in the order they appear from the API. In some cases, the API returns data in a different order, or doesn’t send keys that aren’t populated with values, resulting in mismatched column orders between pulls. There are a few ways to resolve this:
- If your API supports filters natively (e.g. via a query string like
&fields=abc), make use of these filters to limit your fields to just those that consistently contain data. This often resolves the issue.
- JMESPath filtering (paid feature) allows you to choose which fields you’d like and set their position in the sheet, so that column ordering will remain consistent each time. This method is very reliable since it will enforce column ordering even when the API itself changes the fields that it returns.
- You can query individual columns by name into a second sheet using this Sheets’ function, replacing ‘data’ with your sheet name, and ‘field_name’ with your field name:
API Connector can’t access and attach cookies to your request. This means that API Connector will not work with any API that requires cookies.
Pay attention to any error details as they will alert you to specific fields that need to be addressed. This article on Error Messages provides more details on each message.
When making POST requests, we tell the server how to parse the content using a content-type header that describes the object’s format. For URL-encoded types, API Connector automatically sets the content type to
application/x-www-form-urlencoded, so you don’t have to set it yourself. If your server expects a different content type, you can manually set content type of
application/json to override it, by entering Key =
content-type, Value =
application/json in the Headers table.
Missing Records (Pagination)
By default, many API servers return only a limited number of rows in each response. This is known as “pagination”.
There are several common methods of pagination:
- pagination parameters, e.g. www.demo.com/api?page=2
- offset-based pagination, e.g. www.demo.com/api?offset=0&limit=100
- cursor IDs, e.g. www.demo.com/api?starting_after=123456
The exact parameters vary for each API, so if you need to retrieve paginated responses, please consult your API documentation for details. You can usually find this information by searching for terms like “paging”, “pagination”, and “limit”.
In API Connector, you can run these requests separately, or automatically loop through using pagination handling (paid feature).
If you are still missing or skipping records even after applying pagination, make sure you’ve explicitly added the pagination parameters to your initial request URL, e.g. www.demo.com/api?offset=0&limit=100.
Non-JSON/CSV/XML Response Types
API Connector supports all three major data formats: JSON, XML, and text/CSV. If you request data in another format, apply JMESPath that converts the response into a non-JSON/CSV/XML format, or request a ‘regular’ HTML website URL rather than an API endpoint, the request won’t work.
Pro Account Not Recognized
If API Connector doesn’t recognize your upgraded account status after purchase, please double-check that you’re using the same email address you entered into the purchase form. In addition, please click the Account icon in the footer to force a refresh of your account status.
If you’ve purchased the Team Plan, please make sure you’ve filled out this form for access.
Quotas and Limits
The API you’re accessing may limit the number or rate of requests. Google Sheets itself also has built-in limits, as documented here: https://developers.google.com/apps-script/guides/services/quotas. There is a limit of 20,000 API calls quota per day per user, per sheet.
To avoid inadvertently reaching these limits, limit triggers and queries where possible (e.g. don’t run hourly refreshes if you only need daily). Since these limits are per user, you may also hit the API limit if you’re running your own custom scripts or functions in addition to requests from API Connector.
Many APIs limit the number of requests you can send per minute. Generally API Connector doesn’t hit these limits as it automatically inserts 1.5 second delays between stacked or paginated requests. However, there are two scenarios where it’s more likely to run into rate limits:
- when using popular, open APIs (e.g. CoinGecko and Binance). These open APIs rate limit by IP address rather than API key, and large numbers of people use these APIs to pull data to Google Sheets. All requests in Google Sheets run through Google’s shared IP address pool at the same time, such that rate limits can be triggered even when you personally aren’t running a large number of requests. Because of this, it’s generally best to find APIs limited by API keys rather than IP address.
- The IMPORTAPI custom function can rapidly fire off large numbers of requests. Please use the standard sidebar method to avoid these issues.
Request Form Syntax Errors
When you’re reading API documentation, you’ll likely see examples based on different coding languages. Don’t copy these in directly — API Connector is a no-code method of interaction with APIs, so pasting in code snippets won’t work.
Just type in the URL, any headers, and other options. Check the quick start for an example of what a completed API request looks like.
Requests Timing Out
Very large or deeply nested data sets may cause API Connector to time out or stop responding, due to Google Sheets’ 6-minute per request limit. This will usually result in a “failed to run request” error message.
To resolve this issue, try any or all of the following:
- limit the size of your request. Most APIs let you limit request size via date- or ID-based query strings.
- switch to ‘compact’ or ‘grid’ report style. The algorithm for the default single-row output takes a little longer to run, since it needs to process and flatten all the nested data into a single row. Other output styles are faster as they don’t perform this extra flattening.
- if you are using pagination handling, enter a page count instead of fetching all pages. Some APIs send endless pages of data even after the main results set is complete.
- use JMESPath filtering (paid feature) to reduce the number of fields printed into your sheet.
Restricted User Agent
Google Apps script doesn’t enable custom user agents. This means any request from API Connector will use Google script’s default user agent ‘Mozilla/5.0 (compatible; Google-Apps-Script)’. Unfortunately certain APIs may block requests from Google’s User Agent. If that is the case, you will need to ask the platform to lift this restriction on their API.
Restricted IP Address
All API requests through Google Sheets originate from a set pool of IP ranges associated with Google’s servers, and will send over an IP address associated with Google Inc along with your actual IP address. This may prevent a request from resolving if the API server has blocked requests from Google’s IP addresses, or requires all IP addresses to be whitelisted in advance.
Google’s documentation links to a method of looking up these IP addresses if you need to whitelist or approve these requests.
If you are experiencing issues with your scheduled reports, please consult this list of troubleshooting tips specific to triggers: Troubleshooting Triggers
Un-even/Mismatched Output Rows
JSON API responses frequently contain nested data rather than the column-by-column output you’d expect to see in a spreadsheet. Therefore API Connector add-on uses logic to convert JSON responses into a tabular format for Google Sheets. In certain cases, this results in mismatched output rows. If you experience this issue, try changing to a different report style.