Previous answers gave a good baseline, I will add to the pagination-part.Pagination
In my case, the pagination was done via two parametersone parameter (7i208iX0). It seems, 8i40that it always comes with another similar parameter (7i20) but I don't yet know that it does. I can't yet confirm that it'sthis is always these twothe case, but from my experience you're basically looking for two integers that are 20/40/60 etc. apart.
What 7i20 does, I don't know yet, however 8i40 is what seems to do the pagination.
Here's what it looks like for me:
From this information, I tried 7i20 8i00 for page 1, that seemed to work. Because my list contains <80For lists with >100 items, I'm unsure about how thisit just continues like that (this may be where 7i comes in to play)8i120, but it should be a good starting point for some more testing8i140 etc.)
Here's a code snippet in python (quick & dirty). This code may break if the list has >80 items.
Edit: This code seems to work indefinitely. Make sure to add (long) delays, if your list gets long, because otherwise, as you maywill get rate-limited by captchas eventually if you don't. Notice the 8i%s0 in the url, make sure to put the %s back when you paste your pb-block.
Actually getting the correct url
Getting the correct url currently seems to be the hardest part when doing this and I have not fully figured this out aswell. However, for my use-case this is not really needed.
As explained in the other answers, the id is just visible in the url (here, the 2sXX...) when you navigate to the list in your browser. It seems to be 24-32 (?) characters long.
.../maps/<coords>/data=!4m3!11m2!2sXXXXXXXXXX!3e3
If you have this id, you can put it into an existing protobuf-block and it will probably work (I only tested this with 3 different lists, which were all created by the same account, so this theory is far from proven).
Now, how do you get the block? I would just share the one I have, but because I only understand parts of what it does, I fear that it may contain some personal info. Instead, I will share my process of getting it. For this I use Burpsuite. It's free and pretty easy to understand. Also great for exactly this stuff, because you can change small parts in the request, send the request again and check if it still works.
Heres the basic rundown:
From GMaps, share a list that has >20 items (this is important) and copy the public link
In Burp, go to the tab "Proxy", make sure "Intercept" is off and click "Open browser"
Paste the link and wait until maps loaded completely
In Burp, turn "Intercept" on, then in google maps, scroll down in the list, until it starts loading new results (always blocks of 20)
In Burp, click "Forward", until you see a request in the format
GET /search?tbm=map&authuser=0&hl=de&gl=de&pb=!7i20....
This is what you're looking for.
Optionally, you can now right click into the request-text and click "send to repeater", then switch to the repeater-tab. Here you can edit the request and then send it again, being able to see the response immediately. For example, removing the authuser, hl, gl, q, ech, psi url parameters, the request still works flawlessly. If you remove the tch=1 parameter, the response will be formatted more human readable.
In the request-text you should now be able to just search for the id you got from the link previously and replace it with the id of another list (search bar is at the bottom in burp). Let me know how it goes!
Further automating
I have theorised that one could automate getting the pb-block using requests-html because it can load html-sites fully but it doesn't get updated anymore. Another option (probably the better one) is Selenium Wire, as you should be able to load the page and intercept the requests, like we did in burp. Seems like a whole lot of work tho :D