We would like to use Google Analytics to see which pages people read and where signing up stalls. It sets cookies and sends your visit to Google, so it stays off unless you accept. What it records
One account, one key, a predictable response. Find the data your next product needs.
Job Data API
Live
Postings from company career pages and boards, deduplicated per source, with the employment type, job function and career level the source itself publishes, plus the full description on a detail fetch.
GET /v1/jobs
GET /v1/jobs/{id}
POST /v1/jobs/liveness
GET /v1/companies/{id}/jobs
207K postingsRefreshed every 15h · last 38mv1 · stable
req, _ := http.NewRequestWithContext(ctx, "GET",
"https://api.softon.dev/v1/jobs", nil)
req.Header.Set("Authorization", "Bearer "+os.Getenv("SOFTON_KEY"))
q := req.URL.Query()
q.Set("q", "FINCA")
q.Set("remote", "false")
q.Set("updated_after", "2026-08-16T09:00:00Z")
req.URL.RawQuery = q.Encode()
res, err := http.DefaultClient.Do(req)
if err != nil { log.Fatal(err) }
defer res.Body.Close()
var page struct {
Data []Job `json:"data"`
Meta struct{ Next *string`json:"next"` } `json:"meta"`
}
if err := json.NewDecoder(res.Body).Decode(&page); err != nil { log.Fatal(err) }
// page.Meta.Next → send it back as ?cursor= for the following page
import json, os, urllib.parse, urllib.request
url = "https://api.softon.dev/v1/jobs" + "?" + urllib.parse.urlencode({
"q": "FINCA",
"remote": "false",
"updated_after": "2026-08-16T09:00:00Z",
})
req = urllib.request.Request(url, headers={
"Authorization": "Bearer " + os.environ["SOFTON_KEY"],
})
page = json.load(urllib.request.urlopen(req))
# page["meta"]["next"] → send it back as ?cursor= for the following page
const url = new URL("https://api.softon.dev/v1/jobs");
url.searchParams.set("q", "FINCA");
url.searchParams.set("remote", "false");
url.searchParams.set("updated_after", "2026-08-16T09:00:00Z");
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.SOFTON_KEY}` },
});
if (!res.ok) thrownew Error(`${res.status} ${await res.text()}`);
const { data, meta } = await res.json();
// meta.next → send it back as ?cursor= for the following page
Standard libraries. Real endpoints. Copy, paste, build.
04 / SIMPLE, TRANSPARENT PRICING
Start free. Grow at your pace.
Straightforward monthly plans. Priced in Azerbaijani manat.
↗
100 free requests every month.
Every account starts on the Free plan: up to 10,000 job postings a month. No credit card required.
Every account starts free. When you need a paid plan, we’ll contact you to arrange payment card to card. Already have an account? Ask from your dashboard.
Less scraping. More shipping.
Your next idea. One API key away.
The data is here. Let’s see what you build with it.
100 free requests every month. No credit card. Just build.