Jonathan Florentin
Jonathan Florentin

Reputation: 1

Google Forms API Record Limit?

When I use the service.forms().responses().list() snippet I am getting 5,000 rows in my df. When I look at the front end sheet I see more than 5,000 rows. Is there a limit to the number of rows that can be pulled?

Upvotes: 0

Views: 205

Answers (1)

Edo Akse
Edo Akse

Reputation: 4391

You are hitting the default page size, as per this documentation.

When you don't specify a page size, it will return up to 5000 results, and provide you a page token if there are more results. Use this page token to call the API again, and you get the rest, up to 5000 again, with a new page token if you hit the page size again.

Note that you can set the page size to a large number. Do not do this. This method is not the one you should use, I'm including it for completeness' sake. You will still run into the same issue if you hit the larger page size. And there's a hard limit on Google's side (which is not specified/provided).

You can create a simple recursive function that handles this for you.

def get_all(service, formId, responses=[], pageToken=None) -> list:
    # call the API
    res = service.forms().responses(formId=formId, pageToken=pageToken).list().execute()
    # Append responses
    responses.extend(res["responses"])
    # check for nextPageToken
    if "nextPageToken" in res:
        # recursively call the API again.
        return get_all(service, formId, responses=responses, pageToken=res["nextPageToken"])
    else:
        return responses

please note that I didn't test this one, you might need to move the pageToken=pageToken from the .responses() to the .list() parameters. The implementation of Google's python libraries is not exactly consistent.
Let me know if this is the case so I can update the answer accordingly...

Upvotes: 1

Related Questions