GSA eLibrary Enrichment on IDVs — See Which SINs Are Available
Federal procurement data from FPDS (soon to be SAM.gov) can tell you that a vendor has a GSA Schedule contract. But neither SAM nor FPDS will tell you whether a vendor is available on a specific Special Item Number (SIN) or whether they're available for cooperative purchasing. And they won't include pricing information or labor categories. That information lives in GSA eLibrary, a separate system managed by a different part of GSA.
Tango, however, pulls eLibrary data directly into IDV responses so you get schedule, contract number, SIN, and attachment information in one place. In this post we'll cover what SINs and GSA categories are, why enrichment matters, who uses it, how it works, and how to request it in the API.
What are SINs and GSA categories?
The Multiple Award Schedule (MAS)—also called GSA Schedules or Federal Supply Schedule—is the program where federal, state, local, and tribal buyers get commercial products and services at pre-negotiated prices. Contractors hold schedule contracts (IDVs in procurement data); each contract has a scope defined by Special Item Numbers, or SINs.
SINs are classification codes that categorize the specific products or services a contractor is authorized to sell under that schedule. For example, a vendor might hold SIN 54151S (Information Technology Professional Services) or SIN 518210C (Cloud Computing and Cloud-Related IT Professional Services). SINs map to NAICS codes, have official titles and descriptions, and often have subgroups (e.g. for cooperative purchasing or specific capability areas). Buyers use SINs to find vendors whose scope matches their requirement; contractors use them to describe what they're offering.
GSA organizes SINs under categories and subcategories. Categories include Information Technology, Professional Services, Office Management, Industrial Products and Services, Security and Protection, Human Capital, Travel, and others. Under each category you get subcategories (e.g. IT Professional Services, Cloud Services), and under those you get the individual SIN codes. The MAS page on GSA.gov has the full categories, subcategories, and special item numbers table with filterable SIN lookups, NAICS mappings, and links into eLibrary for each SIN. Tango also maintains a MAS SINs reference table at GET /api/mas_sins/ so you can look up SIN codes, titles, categories, NAICS, and related metadata programmatically—handy when you're matching gsa_elibrary.sins on an IDV to human-readable names or filtering by category. When we enrich IDVs with eLibrary data, the sins array on the IDV is the list of those SIN codes (and sometimes subgroups) that this contractor holds for that schedule.
Why it matters
When you're working with GSA Multiple Award Schedule (MAS), you usually need to answer: What can this contractor sell under this schedule? and Where are their price lists and terms? SINs are the codes that define those products and services. Without them, you're left matching PIIDs to eLibrary by hand or building and maintaining your own eLibrary scraper.
Tango's GSA eLibrary enrichment attaches a best-effort match from our persisted eLibrary data to each IDV. When a match exists, the IDV response includes a gsa_elibrary object with fields like schedule, contract_number, sins, and file_urls. When there's no match (e.g. non-GSA IDV or no eLibrary row), the field is null. You get one request to the Tango API instead of one to FPDS-style data and another to eLibrary—and you can shape the response so you only get the eLibrary subfields you care about.
Use cases
- Vendor shortlists by SIN: You have an opportunity or requirement that maps to specific SINs (e.g. IT professional services, cloud). You want IDVs (or vehicles) where the contractor holds those SINs. Enrichment lets you filter or rank by
gsa_elibrary.sinswithout a separate eLibrary lookup. - Compliance and eligibility: Checking that a contract or order is under an IDV that actually includes the SIN you're buying under. Having SINs on the IDV record makes it easier to validate.
- Price list and document discovery:
file_urlsin eLibrary point to contract documents and price lists. Enrichment surfaces these on the IDV so downstream tools can link users to the right files. - Schedule and contract number in one place: Reporting or dashboards that show “schedule + contract number + SINs” per vendor per IDV. One IDV list request with a shape that includes
gsa_elibrary(schedule,contract_number,sins,file_urls)gives you the full picture. - Integrating with eLibrary-heavy workflows: If your app already reasons about GSA Schedules and SINs (e.g. from Tango's MAS SINs reference API or eBuy), having the same SINs and schedule on the IDV keeps everything aligned.
How it works
Tango persists GSA eLibrary data and matches it to IDVs. The match is best-effort (e.g. by PIID or other identifiers). IDV list and detail responses include a gsa_elibrary property: either an object with the enriched fields or null when we have no matching eLibrary row. We don't change the core IDV fields from FPDS; we add this as an optional block so you can ignore it when you don't need it or request it only when you do via response shaping.
You can also query eLibrary rows directly with GET /api/gsa_elibrary_contracts/ when you need to search or list eLibrary data independent of IDVs.
How to use it
Request only the eLibrary subfields you need with the shape parameter so responses stay small. For example, to get key, PIID, and eLibrary schedule, contract number, SINs, and file URLs:
curl -G 'https://tango.makegov.com/api/idvs/' \
-H "X-API-KEY: ${TANGO_API_KEY}" \
--data-urlencode "piid=GS00Q1234ABCD" \
--data-urlencode "shape=key,piid,gsa_elibrary(schedule,contract_number,sins,file_urls)" \
--data-urlencode "limit=10"
In the response, each IDV will have gsa_elibrary set to an object (e.g. {"schedule": "MAS", "contract_number": "...", "sins": [...], "file_urls": [...]}) or null. Use the same shape on detail (GET /api/idvs/{key}/) if you only need those fields there.
For the full list of IDV filters, ordering, and pagination, see the IDVs API reference; the GSA eLibrary enrichment section describes this block and the optional GET /api/gsa_elibrary_contracts/ endpoint.
Key takeaways
- SINs define schedule scope: Special Item Numbers are the codes that specify which products or services a contractor can sell under the Multiple Award Schedule (MAS); they're organized by categories and subcategories on GSA.gov.
- IDV data alone doesn't include SINs: FPDS gives you the award; GSA eLibrary gives you SINs and related files. Tango merges them so you don't have to.
gsa_elibraryon IDVs: List and detail responses include agsa_elibraryobject (ornull) with schedule, contract number, SINs, and file URLs when we have a match.- Use shaping: Request only
gsa_elibrary(schedule,contract_number,sins,file_urls)(or a subset) so payloads stay small and you don't pull unnecessary IDV fields. - Best-effort match: Enrichment is best-effort; always handle
nullwhen you need SINs or files. - MAS SINs reference: Tango exposes a MAS SINs reference table at
/api/mas_sins/for looking up SIN codes, titles, categories, and NAICS programmatically. - Direct eLibrary API: For workflows that center on eLibrary rather than IDVs, use
GET /api/gsa_elibrary_contracts/to query persisted eLibrary rows directly.
If you're building tools that need to know which SINs are available on GSA Schedule IDVs—for shortlisting, compliance, or document discovery—Tango's GSA eLibrary enrichment gives you that in the same IDV request, with response shaping so you only get the fields you need.
Ready to Get Started with Tango?
If you're working with federal procurement data, Tango provides a unified API that combines federal procurement data sets, improves on them, with a developer-friendly approach. Skip the complexity of scraping and joining multiple government APIs yourself.