Discovery Market Research
gsa · Company
This API drives the Discovery Market Research Tool . It contains information on the vendors that are part of the OASIS and OASIS Small Business contracting vehicles, such as their contracting history, their elligibility for contract awards, and their small business designations. To learn more about the tool, please visit Discovery or see the README on our GitHub rep
Authentication
Sample Requests
This endpoint returns contract history from FPDS for a specific vendor. The vendor's DUNS number is a required parameter. You can also filter contracts by their NAICS code to find contracts relevant to a particular category.
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/gsa.gov/0.1/api/contracts/?duns=example&page=1&sort=desc&naics=example&direction=asc"
import requests
params = {
"duns": "example",
"page": "1",
"sort": "desc",
"naics": "example",
"direction": "asc"
}
response = requests.get(
"https://api.apis.guru/v2/specs/gsa.gov/0.1/api/contracts/",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/gsa.gov/0.1/api/contracts/');
url.searchParams.set('duns', 'example');
url.searchParams.set('page', '1');
url.searchParams.set('sort', 'desc');
url.searchParams.set('naics', 'example');
url.searchParams.set('direction', 'asc');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/gsa.gov/0.1/api/contracts/")
q := baseURL.Query()
q.Set("duns", "example")
q.Set("page", "1")
q.Set("sort", "desc")
q.Set("naics", "example")
q.Set("direction", "asc")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/gsa.gov/0.1/api/contracts/")
uri.query = URI.encode_www_form({
"duns" => "example",
"page" => "1",
"sort" => "desc",
"naics" => "example",
"direction" => "asc"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/gsa.gov/0.1/api/contracts/?" . http_build_query([
"duns" => "example",
"page" => "1",
"sort" => "desc",
"naics" => "example",
"direction" => "asc"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));This endpoint returns a list of vendors filtered by a NAICS code. The NAICS code maps to an OASIS pool and is used to retrieve vendors in that pool only. OASIS pools are groupings of NAICS codes that have the same small business size standard. Because contracts solicited to OASIS vendors c
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/gsa.gov/0.1/api/vendors/?naics=example&vehicle=example&setasides=example"
import requests
params = {
"naics": "example",
"vehicle": "example",
"setasides": "example"
}
response = requests.get(
"https://api.apis.guru/v2/specs/gsa.gov/0.1/api/vendors/",
params=params,
)
print(response.json())const url = new URL('https://api.apis.guru/v2/specs/gsa.gov/0.1/api/vendors/');
url.searchParams.set('naics', 'example');
url.searchParams.set('vehicle', 'example');
url.searchParams.set('setasides', 'example');
const response = await fetch(url);
const data = await response.json();
console.log(data);package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/gsa.gov/0.1/api/vendors/")
q := baseURL.Query()
q.Set("naics", "example")
q.Set("vehicle", "example")
q.Set("setasides", "example")
baseURL.RawQuery = q.Encode()
targetURL := baseURL.String()
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/gsa.gov/0.1/api/vendors/")
uri.query = URI.encode_www_form({
"naics" => "example",
"vehicle" => "example",
"setasides" => "example"
})
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/gsa.gov/0.1/api/vendors/?" . http_build_query([
"naics" => "example",
"vehicle" => "example",
"setasides" => "example"
]);
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));This endpoint returns metadata for the most recent data loads of SAM and FPDS data. It takes no parameters.
Hover any highlighted part to learn what it does
curl -X GET "https://api.apis.guru/v2/specs/gsa.gov/0.1/api/metadata/"
import requests
response = requests.get(
"https://api.apis.guru/v2/specs/gsa.gov/0.1/api/metadata/",
)
print(response.json())const url = 'https://api.apis.guru/v2/specs/gsa.gov/0.1/api/metadata/'; const response = await fetch(url); const data = await response.json(); console.log(data);
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
targetURL := "https://api.apis.guru/v2/specs/gsa.gov/0.1/api/metadata/"
req, _ := http.NewRequest("GET", targetURL, nil)
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}require "net/http"
require "json"
uri = URI("https://api.apis.guru/v2/specs/gsa.gov/0.1/api/metadata/")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"
req = Net::HTTP::Get.new(uri)
res = http.request(req)
puts JSON.parse(res.body)<?php
$url = "https://api.apis.guru/v2/specs/gsa.gov/0.1/api/metadata/";
$opts = ["http" => [
"method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));Postman Setup Guide
- See official documentation for authentication and setup.
What can you build with Discovery Market Research?
Discovery Market Research is a Company API. Developers commonly use company APIs for:
- enriching CRM records with company firmographics
- building lead-generation and prospecting tools
- verifying business identity and registration details
- monitoring competitors and market intelligence
- powering B2B data enrichment pipelines
No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. Discovery Market Research is free to use, making it a low-risk choice to experiment with.
New to APIs? Read our beginner's guide · Learn about API keys · What is REST?