GSA APIgsaelibrary.gsa.gov ↗
Search GSA Multiple Award Schedule SIN codes and category descriptions via API. Returns sin_code, category_title, description, subcategory, and schedule data.
What is the GSA API?
The GSA eLibrary API provides a single search_categories endpoint that returns up to the full set of matching Multiple Award Schedule (MAS) SIN/category records from GSA eLibrary, including 6 structured fields per result: sin_code, category_title, category_description, subcategory, schedule_number, and schedule name. It lets developers query federal contract vehicle categories by keyword to identify applicable SIN codes and schedule groupings programmatically.
curl -X GET 'https://api.parse.bot/scraper/ac083cd9-912c-477a-8495-3e1cacfc1c75/search_categories?keyword=CNC+machining&search_type=allWords' \ -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 gsaelibrary-gsa-gov-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.
"""Walkthrough: GSA eLibrary SDK — bounded, re-runnable; every call capped."""
from parse_apis.gsaelibrary_gsa_gov_api import GsaELibrary, SearchType, InputFormatInvalid
client = GsaELibrary()
# Search for MAS categories related to CNC machining
for category in client.categories.search(keyword="CNC machining", limit=3):
print(category.sin_code, category.category_title, category.subcategory)
# Use a different search mode
item = client.categories.search(keyword="industrial manufacturing", search_type=SearchType.ANY_WORDS, limit=1).first()
if item:
print(item.sin_code, item.schedule_number, item.category_description[:80])
# Typed error handling
try:
for cat in client.categories.search(keyword="welding supplies", limit=2):
print(cat.sin_code, cat.schedule_number)
except InputFormatInvalid as e:
print(f"invalid input: {e}")
print("exercised: categories.search")
Full-text keyword search across GSA Multiple Award Schedule SIN/category codes and descriptions. Returns matching categories with their SIN code, title, description, subcategory grouping, and parent schedule information. Results are auto-iterated (single page). Keyword matching uses GSA Advantage's index; results reflect the site's relevance ranking.
| Param | Type | Description |
|---|---|---|
| keywordrequired | string | Search term(s) to match against SIN category titles and descriptions (e.g. 'CNC machining', 'industrial manufacturing'). |
| search_type | string | How to match the keyword terms against the index. |
{
"type": "object",
"fields": {
"total": "count of results returned",
"keyword": "the search keyword submitted",
"results": "array of matching SIN/category records with sin_code, category_title, category_description, subcategory, schedule_number, schedule_description",
"search_type": "search mode used"
},
"sample": {
"data": {
"total": 3,
"keyword": "CNC machining",
"results": [
{
"sin_code": "332510C",
"subcategory": "Industrial Products and Services - Hardware and Tools",
"category_title": "Hardware Store, Home Improvement Center, Industrial or General Supply Store, or Industrial Maintenance Repair and Operations (MRO) Distributor - Catalog",
"schedule_number": "MAS",
"category_description": "Products and equipment including but not limited to: flooring, fencing, hardware, building materials, tools, appliances, electric, paint, plumbing, lawn and garden, motors, shop, machining, welding, material handling; carts, trucks and dock; HVAC, cleaning and irrigation, equipment. These items must meet government requirements for Energy Star or Federal Energy Management Program (FEMP)-designated products, and/or the use of non-ozone depleting substances, as applicable to product groups with designation.",
"schedule_description": "Multiple Award Schedule-Available offerings include commercial goods and services organized by 12 Large Categories, corresponding Subcategories, and SINs."
},
{
"sin_code": "332999",
"subcategory": "Security and Protection - Protective Equipment",
"category_title": "Law Enforcement Personal Equipment",
"schedule_number": "MAS",
"category_description": "Includes all personal equipment related to law enforcement, such as restraints, duty belts, flashlights, weapon scopes, gas masks, etc. NOTE: Subject to Cooperative Purchasing",
"schedule_description": "Multiple Award Schedule-Available offerings include commercial goods and services organized by 12 Large Categories, corresponding Subcategories, and SINs."
},
{
"sin_code": "811310MR",
"subcategory": "Facilities - Facilities Solutions",
"category_title": "Machine and Equipment Sales, Maintenance and Repair",
"schedule_number": "MAS",
"category_description": "Includes the sale, maintenance and repair of commercial/industrial machinery and equipment, such as machine tools, metalworking machinery, food machinery, cleaning equipment, and containers.",
"schedule_description": "Multiple Award Schedule-Available offerings include commercial goods and services organized by 12 Large Categories, corresponding Subcategories, and SINs."
}
],
"search_type": "allWords"
},
"status": "success"
}
}About the GSA API
What the API Covers
The search_categories endpoint queries the GSA eLibrary catalog of Multiple Award Schedule (MAS) Special Item Numbers (SINs). Each SIN record describes a category of goods or services available to federal purchasers through GSA schedule contracts. The endpoint accepts a keyword string matched against SIN titles and descriptions, and returns all results in a single paginated response (auto-iterated — no manual paging required).
Request Parameters
The two inputs are keyword (required) and search_type (optional). The keyword field controls what text is matched — for example, 'CNC machining', 'cloud hosting', or 'janitorial services'. The search_type parameter controls how the terms are applied to the index (e.g., exact phrase vs. any-term matching). Omitting search_type uses the default matching mode.
Response Shape
Every response includes a total count, the submitted keyword, the search_type used, and a results array. Each element in results contains:
- sin_code — the unique Special Item Number identifier
- category_title — the short display name for the SIN
- category_description — a full-text description of what the SIN covers
- subcategory — the grouping within the parent schedule
- schedule_number — the numeric identifier of the parent MAS schedule
- schedule — the human-readable name of the parent schedule
Source and Scope
GSA eLibrary (gsaelibrary.gsa.gov) is the official public-facing catalog for GSA Multiple Award Schedule information maintained by the U.S. General Services Administration. The API covers SIN/category discovery only — it does not expose individual contractor award data, pricing, or contract holders within a SIN.
The GSA API is a managed, monitored endpoint for gsaelibrary.gsa.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when gsaelibrary.gsa.gov 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 gsaelibrary.gsa.gov 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?+
- Identify applicable SIN codes for a product or service line before pursuing a GSA MAS contract
- Build a procurement classification tool that maps internal service descriptions to GSA schedule categories
- Audit a list of vendor offerings against official GSA MAS SIN definitions using category_description fields
- Populate a federal acquisition research tool with schedule_number and schedule name metadata
- Validate that a proposed GSA contract scope falls within a recognized subcategory grouping
- Generate a reference table of all SIN codes relevant to a specific industry vertical (e.g., IT, facilities, logistics)
| 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.