Google APIfonts.google.com ↗
Access Google Fonts catalog data via API. Search by category, subset, or name. Get variants, variable axes, designers, and rankings for any font family.
What is the Google API?
This API provides structured access to the Google Fonts catalog across 2 endpoints, returning metadata for thousands of free, open-source typefaces. The search_fonts endpoint lets you filter by category, script subset, and sort order — returning family names, variant lists, popularity ranks, and designer credits. The get_font_details endpoint exposes per-family metadata including variable font axes, typographic classification, and date added.
curl -X GET 'https://api.parse.bot/scraper/ab1e521d-6afa-4336-a3e8-b5f698199b4a/search_fonts?sort=popularity&limit=5&query=Roboto&subset=latin&category=sans-serif' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace fonts-google-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.google_fonts_api import GoogleFonts, Font, FontSummary, Sort, Category, Subset
client = GoogleFonts()
# Search for serif fonts sorted by popularity
for font in client.fontsummaries.search(category=Category.SERIF, sort=Sort.POPULARITY, limit=5):
print(font.family, font.popularity_rank, font.date_added)
# Get detailed info for a specific font
roboto = client.fonts.get(family="Roboto")
print(roboto.family, roboto.size_bytes, roboto.is_open_source)
for axis in roboto.axes:
print(axis.tag, axis.min, axis.max, axis.default_value)
# Navigate from a summary to its detail
for summary in client.fontsummaries.search(query="Open", subset=Subset.LATIN, limit=3):
detail = summary.details()
print(detail.family, detail.stroke, detail.designers)
Search and filter Google Fonts by name, category, subset, with sorting options. Returns a paginated list of font families matching the criteria. Supports filtering by category (sans-serif, serif, display, handwriting, monospace), language/script subset, and partial family-name matching. Results are sorted server-side before the limit is applied; the total count reflects all matches pre-limit.
| Param | Type | Description |
|---|---|---|
| sort | string | Sort order for results. |
| limit | integer | Maximum number of results to return. |
| query | string | Search query to match against font family names (case-insensitive partial match). |
| subset | string | Filter by language/script subset (e.g., latin, cyrillic, greek, japanese, arabic). Empty string returns all subsets. |
| category | string | Filter by font category. Empty string returns all categories. |
{
"type": "object",
"fields": {
"count": "integer — number of fonts returned in this response",
"fonts": "array of FontSummary objects",
"total": "integer — total number of fonts matching filters before limit is applied"
},
"sample": {
"data": {
"count": 5,
"fonts": [
{
"family": "Roboto",
"subsets": [
"cyrillic",
"cyrillic-ext",
"greek",
"greek-ext",
"latin",
"latin-ext",
"math",
"symbols",
"vietnamese"
],
"category": "Sans Serif",
"variants": [
"100",
"100i",
"200",
"200i",
"300",
"300i",
"400",
"400i",
"500",
"500i",
"600",
"600i",
"700",
"700i",
"800",
"800i",
"900",
"900i"
],
"designers": [
"Christian Robertson",
"ParaType",
"Font Bureau"
],
"date_added": "2013-01-08",
"last_modified": "2026-02-19",
"trending_rank": 1304,
"popularity_rank": 2
}
],
"total": 6
},
"status": "success"
}
}About the Google API
Search and Filter the Font Catalog
The search_fonts endpoint accepts five optional parameters: query (case-insensitive name match), category (sans-serif, serif, display, handwriting, monospace), subset (latin, cyrillic, arabic, japanese, and more), sort (popularity, trending, alphabetical, date, name), and limit. The response includes a total field showing how many fonts match the filters before the limit is applied, a count of results in the current response, and a fonts array. Each font object in the array carries family, category, variants, subsets, designers, popularity_rank, trending_rank, and last_modified.
Detailed Font Metadata
The get_font_details endpoint takes a single required family parameter and returns the full metadata record for that typeface. Beyond the basics shared with the search response, it adds axes — an array of variable font axis descriptors, each with tag, min, max, and defaultValue — and a fonts object keyed by variant identifier (e.g. '400', '700i'), where each entry includes thickness, slant, width, and lineHeight. Additional fields include stroke, is_noto (boolean flagging Noto project fonts), and date_added in ISO YYYY-MM-DD format.
Coverage and Data Shape
Both endpoints reflect the publicly listed Google Fonts catalog. Ranking data comes in two flavors: popularity_rank for all-time download volume ordering, and trending_rank for recent momentum. The subsets array on each font lists every supported language/script, making it straightforward to filter for fonts that cover specific writing systems before loading them into a project.
The Google API is a managed, monitored endpoint for fonts.google.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when fonts.google.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official fonts.google.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a font picker UI that filters by
categoryandsubsetto show only fonts supporting a target script like Arabic or Cyrillic. - Generate a ranked directory of the most-downloaded Google Fonts using
sort=popularityfromsearch_fonts. - Detect fonts with variable axis support by checking the
axesarray inget_font_detailsbefore embedding them in a design system. - Audit which fonts were added most recently using
sort=dateto surface new catalog additions. - Cross-reference
designersdata fromget_font_detailsto attribute typefaces correctly in documentation or credits. - Filter monospace fonts via
category=monospaceto populate a code editor theme selector. - Identify Noto project fonts using the
is_notoboolean when building multilingual typographic tools.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Google Fonts have an official developer API?+
popularity_rank, trending_rank, and variable font axes that the official API does not expose directly.What does `get_font_details` return for variable fonts specifically?+
axes array contains one object per registered axis, each with a tag (e.g. wght, ital), a min value, a max value, and a defaultValue. If a font has no variable axes, the axes array is empty. The fonts object also provides per-variant metrics including thickness, slant, width, and lineHeight.Can I retrieve the actual font files or CSS embed URLs through this API?+
Does pagination work differently between the two endpoints?+
search_fonts endpoint supports a limit parameter and returns both count (results in this response) and total (all matches before limiting), giving you enough to implement offset pagination on your side. The get_font_details endpoint returns a single font record by exact family name and has no pagination concept.Are font usage analytics or embed count data available?+
popularity_rank and trending_rank as ordinal ranking fields, but not raw embed counts, weekly views, or historical usage time series. You can fork this API on Parse and revise it to add an endpoint targeting usage trend data if that surface becomes available.