Find an API

Search public APIs with auth details & Postman guides

← All APIs

Discovery Market Research

gsa · Company

Company No Auth Free & Open API

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

No authentication requiredFree to use with no key needed.

Sample Requests

GET This endpoint returns contract history from FPDS for a specific vendor

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.

https://api.apis.guru/v2/specs/gsa.gov/0.1/api/contracts?duns=example&page=1&sort=desc&naics=example&direction=asc

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));
GET This endpoint returns a list of vendors filtered by a NAICS code

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

https://api.apis.guru/v2/specs/gsa.gov/0.1/api/vendors?naics=example&vehicle=example&setasides=example

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));
GET This endpoint returns metadata for the most recent data loads of SAM and FPDS data

This endpoint returns metadata for the most recent data loads of SAM and FPDS data. It takes no parameters.

https://api.apis.guru/v2/specs/gsa.gov/0.1/api/metadata

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

Get Postman ↗
  1. 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?

Open documentation ↗