Google 3D Tiles Cost

I just saw the release today that Google Map tiles are now fully available and with that, it brings a tiered cost model in.

" Now that Photorealistic 3D Tiles, 2D Tiles and Street View Tiles are generally available, billing will reflect a tiered pricing model that’s based on a per Root Tile request for Photorealistic 3D Tiles (akin to a map ‘session’) and per Tile request for 2D Map and Street View Tiles. If you’re ready to get started, head to the Cloud console. If you’ve already integrated your application with Map Tiles API, you can continue to do so with the same API key and account, and will be billed per the tiered pricing model. To learn more about Maps Tiles API, please check out our website and documentation."

The terms for billing seem to be a little confusing for me. Can anyone explain when using Cesium in Unreal, when the tile requests happen? How does this fit into the Google 28,500 map loads every month for no charge? I’m hesitant to continue to use this and all of a sudden get a large charge on my credit card.


1 Like

“Root tile” basically refers to the initial request when you start using the Google Photorealistic 3D Tiles. In most cases, each launch of your app is one “root tile” request. Sometimes other actions, such as calling RefreshTileset, creating a new Cesium3DTileset at runtime, or starting a Play-in-Editor session, can also count as a “root tile” request. We quite like this new pricing model, because it doesn’t leave developers wondering just how many tiles their end-users might use in a given session.


Thanks for the response. I do have a follow-up though. Is the root tile request and the map load the same thing? For example, Google stated that we get 28,500 map loads every month for no charge, so is that the same as 28,500 root tile requests?

If I open my project 5 times in a day in the Unreal Editor, would that be 5 map requests? All in all, this sounds like an extremely reasonable pricing structure, but I just want to make sure I understand it.

We’re just making sure that we have an idea of what this all means. We’re in an architecture studio and most of us have our personal credit cards linked to the Google accounts, so we’re just making sure we’re not going to have any hidden charges. This also means that we’re still pretty new to this whole process so when we get something to work, we’re dancing around our computers like Tom Hanks lighting his first fire in the movie “Castaway”.

The way Google’s tiered pricing works is that you get a $200 credit each month. So across every service, if your total usage is under $200, it is free. Different services charge different rates for usage and have different metrics. So for 2D dynamic map loads that is $7 USD per 1000 map loads. So $200/$7*1000 = 28,571 map loads per month for free, assuming you don’t use any other Google Console billable services (like Geocoding or 2D static tiles or Photorealistic 3D tiles).

The pricing for the Photorealistic 3D Tiles is $6 per 1000 “3D root tiles” at the moment. So $200 will only buy you 33,333 “3D root tiles” per month, assuming that is all you are using that $200 credit for. If you are mixing your usage between multiple services then each of them contribute to the $200 credit and it can add up very quickly.

Let’s say you made a popular 3D application with Google 3D tiles and got, say, 50,000 users (so around 1,700 per day, which is not much), each of which (through some miracle) only used 1 3D map tile. The first 33,333 of those are free — hooray. The remaining 16,667 of those are charged at $0.006 each, so $100. Which is a lot of money for an individual for not that many users in a month in web terms. If you actually made something that, say, got even moderately popular on Reddit for one month, and you got 100,000 views in a month (a month!), then that’s a $400 charge. If you made something that went a bit more viral and you got 500,000 views in a month, then you’re talking about (100,000 * $0.006) + (400,000 * $0.0051) - $200 = $2,440. (After 100,000 views the price goes down a little; more than 500,000 views and they refer you to contact Sales for Volume pricing.)

If you’re thinking, gee, this could get expensive if I make a popular app, you are correct. Google has no mechanism in place to “cap” usage; all you can do is set up an “Alert” that will e-mail you if you go above a given threshold, and then you can shut off the API or whatever for the rest of the month.

It’s a super unpleasant business model and a popular application can swamp you with ridiculous costs if you aren’t careful. I will say that if it is a one-time incident like that, they are usually pretty good about waiving a given month’s ridiculous fees if you apologize and indicate you didn’t understand it would be that expensive. But it’s not a long-term solution.

If I sound like I speak from bitter experience on all of this… I do! I’ve run a moderately popular mapping website for the last +10 years, and had to transition away from Google in 2018 when they switched to the new “tiered” model that increased the cost of running a map website with them by a factor of 10X in one month (and that wasn’t even that busy of a month). I came to the conclusion that Google has a really bad pricing model, one that actively punishes web developers who stumble across something cool but don’t have a way to make money with their website in place (or simply aren’t trying to make money from their websites). When I started mapping in 2012, they provided mapping services for free, but those days are long gone…

An alternative way to deal with this that I have used is setting up a means of keeping track of how many tiles are used and then shutting it off automatically. This can be done with a mixture of Javascript (e.g., each version of your application “phones home” whenever it loads an uncached tile) and server-side scripting (e.g. a PHP script that is required to provide the API key and keeps track of usage, and either denies further usage after a point or switches to a different service).

Or one could do things that explicitly break Google’s TOS like caching the tiles, but you didn’t hear that from me. (I have no idea how that would work with 3D tiles in any event. I have not used their 3D tile services before, except to experiment with them on here.)

The long-term approach is going to be developing alternatives to Google (on a model like OpenStreetMap or something) because the Google model is super exploitative and super expensive. In the area of dynamic mapping we are basically there — it is now possible to self-host vector map tiles at literally 1/600 the cost of Google, Mapbox, etc. I don’t know how far away this stuff is for 3D mapping, but I am very dim on the idea that Google is going to be the platform of choice for this stuff with such a punishing pricing model. One wonders who they think their developers are.

To your question about Unreal, it depends on whether it caches the results locally or not. A tile loaded from a local cache is not usually charged. If it is downloading the same time each time, then yes, that would count as 5 billed uses. I don’t use it on Unreal so I can’t say. A web browser tends to cache downloaded files… I don’t know if Unreal does.

If you are just doing this for something in-house and don’t plan to let anyone else in the wider world use it, then the $200 credit is probably adequate, even if it was spread across your whole office, because even the constant-refresh of debugging/developing isn’t likely to be loading 1,000 tiles a day (and anyway, if you have doubts, you can always monitor the usage through the Google Cloud Console).


Thanks for the extremely detailed response! 99.9% of our use is for project visualization, so our output will be images and video. We’re using Unreal and only using the 3D tiles from Cesium for the Google services.

However, getting apps pixel streamed to the web for client presentations or even web views for project support is on the horizon for us so it is good to know that we’ll need to keep any eye on things if we were to go that route and potentially set up a billing back to the client for our app fees.

You should take your questions to Google; Cesium and I don’t speak for them, and I don’t think Nucleon does, either.

Your original post contained a link to their pricing calculator:

Photorealistic 3D Tiles are only (AFAIK) licensed on a per root tile basis. Other products are licensed differently, but that doesn’t help if you’re using the 3D Tiles. So armed with an understanding of what a root tile request is (a single session, by one user, on one run of the app, for as much as 3 hours), you should be able to get a sense of what the costs wil be.

It seems Google has a 300 3D Tiles root requests limit per day. I’ve just hit that limit and now unable to load map no more, but I just started testing my app, barely using it. Is this correct or I’m doing something wrong ?

I’m not sure offhand what is the current per-day limit on root tile requests, but 300 sounds plausible. I’m surprised to hear you’re hitting it just testing your app yourself, though. I believe each time you start a Play-in-Editor session it’s a new root tile request, so I guess you could be doing that 300 times in a single day?

I’m surprised you’re getting 300 requests a day. Are you aware of ?

I’m either very lazy or my usage is a lot lower:

All this is well within my $200 of free credits.

FYI - unless you need the 3D Tiles for testing you can always switch to another tile set and only switch 3D Tiles on when you’re ready to publish. That works for me.

So if I have 300 users, each user only starts the app once per day, that’s the limit ? It seems it won’t allow to go over, the map won’t load up after reaching 300.

That’s my understanding, yes. It’s Google’s limit, not Cesium’s, so you should reach out to them if it is insufficient for your application.