jobspipe

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 18, 2026 License: MIT Imports: 8 Imported by: 0

README

jobspipe-go

The official Go SDK for the JobsPipe API: search live, normalized job postings from 30+ ATS feeds and job boards, and detect the technology stack behind any company domain.

Install

go get github.com/jobspipe/jobspipe-go

Usage

package main

import (
	"context"
	"fmt"

	jobspipe "github.com/jobspipe/jobspipe-go"
)

func main() {
	client := jobspipe.NewClient("") // reads JOBSPIPE_API_KEY

	remote := true
	jobs, err := client.SearchJobs(context.Background(), jobspipe.SearchJobsRequest{
		JobTitleOr: []string{"software engineer"},
		Remote:     &remote,
		Limit:      5,
	})
	if err != nil {
		panic(err)
	}
	for _, j := range jobs.Data {
		fmt.Println(j.JobTitle, "@", j.Company)
	}

	stack, err := client.ScanStack(context.Background(), jobspipe.ScanStackRequest{Domain: "stripe.com"})
	if err != nil {
		panic(err)
	}
	fmt.Println(stack.Domain, "runs", len(stack.Detected), "detected technologies")
}

Other SDKs and agent tooling

MIT licensed.

Documentation

Overview

Package jobspipe is the official Go SDK for the JobsPipe API (https://jobspipe.dev): search live job postings from 30+ ATS feeds and job boards, and detect the technology stack behind any company domain.

Index

Constants

View Source
const DefaultBaseURL = "https://api.jobspipe.dev"

DefaultBaseURL is the production JobsPipe API host.

Variables

This section is empty.

Functions

This section is empty.

Types

type APIError

type APIError struct {
	StatusCode int
	Body       string
}

APIError is a non-2xx response from the JobsPipe API.

func (*APIError) Error

func (e *APIError) Error() string

type Client

type Client struct {
	// APIKey is the JobsPipe secret key (prefix jp_live_).
	APIKey string
	// BaseURL overrides DefaultBaseURL when set.
	BaseURL string
	// HTTPClient overrides the default 30s-timeout client when set.
	HTTPClient *http.Client
}

Client calls the JobsPipe API. Create one with NewClient.

func NewClient

func NewClient(apiKey string) *Client

NewClient returns a Client authenticated with apiKey. If apiKey is empty, the JOBSPIPE_API_KEY environment variable is used.

func (*Client) ScanStack

func (c *Client) ScanStack(ctx context.Context, req ScanStackRequest) (*ScanStackResponse, error)

ScanStack detects the technology stack running on a domain.

func (*Client) SearchJobs

func (c *Client) SearchJobs(ctx context.Context, req SearchJobsRequest) (*SearchJobsResponse, error)

SearchJobs searches live, normalized job postings.

type Job

type Job struct {
	ID          string  `json:"id"`
	JobTitle    string  `json:"job_title"`
	Company     string  `json:"company"`
	Location    *string `json:"location"`
	CountryCode *string `json:"country_code"`
	Remote      *bool   `json:"remote"`
	Seniority   *string `json:"seniority"`
	DatePosted  *string `json:"date_posted"`
	FinalURL    *string `json:"final_url"`
}

Job is one normalized job posting.

type ScanStackRequest

type ScanStackRequest struct {
	Domain string `json:"domain"`
	Mode   string `json:"mode,omitempty"`
}

ScanStackRequest is the body for POST /v1/stack/scan.

type ScanStackResponse

type ScanStackResponse struct {
	Domain     string           `json:"domain"`
	ScannedAt  string           `json:"scanned_at"`
	HTTPStatus int              `json:"http_status"`
	RenderPath string           `json:"render_path"`
	Detected   []map[string]any `json:"detected"`
}

ScanStackResponse is the response of POST /v1/stack/scan. Detected entries are loosely typed; see https://docs.jobspipe.dev for the current shape.

type SearchJobsMetadata

type SearchJobsMetadata struct {
	TotalResults     *int    `json:"total_results"`
	TruncatedResults *int    `json:"truncated_results"`
	NextCursor       *string `json:"next_cursor"`
}

SearchJobsMetadata describes the result set.

type SearchJobsRequest

type SearchJobsRequest struct {
	JobTitleOr                []string `json:"job_title_or,omitempty"`
	JobTitleNot               []string `json:"job_title_not,omitempty"`
	DescriptionOr             []string `json:"description_or,omitempty"`
	DescriptionNot            []string `json:"description_not,omitempty"`
	JobCountryCodeOr          []string `json:"job_country_code_or,omitempty"`
	JobCountryCodeNot         []string `json:"job_country_code_not,omitempty"`
	JobLocationOr             []string `json:"job_location_or,omitempty"`
	JobSeniorityOr            []string `json:"job_seniority_or,omitempty"`
	EmploymentTypeOr          []string `json:"employment_type_or,omitempty"`
	SourceOr                  []string `json:"source_or,omitempty"`
	CompanyNamePartialMatchOr []string `json:"company_name_partial_match_or,omitempty"`
	Remote                    *bool    `json:"remote,omitempty"`
	PostedAtMaxAgeDays        int      `json:"posted_at_max_age_days,omitempty"`
	PostedAtGte               string   `json:"posted_at_gte,omitempty"`
	PostedAtLte               string   `json:"posted_at_lte,omitempty"`
	Limit                     int      `json:"limit,omitempty"`
	IncludeTotalResults       bool     `json:"include_total_results,omitempty"`
}

SearchJobsRequest is the filter body for POST /v1/jobs/search. Zero-value fields are omitted from the request.

type SearchJobsResponse

type SearchJobsResponse struct {
	Metadata SearchJobsMetadata `json:"metadata"`
	Data     []Job              `json:"data"`
}

SearchJobsResponse is the response of POST /v1/jobs/search.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL