Job API Overview

1. API Overview

Techmap collects job postings from 127+ sources - ATS career pages, job boards, aggregators, and employment offices - and makes them available through two APIs and daily bulk feeds. The Daily International Job Postings API covers the last 3 months and returns JSON by default but can be set to return CSV, RSS, ATOM, XML, or Parquet output instead. The Job Postings RSS API serves job boards that consume RSS feeds directly. For bulk access, Job Data Feeds provide gzip-compressed JSON-Lines files per country per day.

Both APIs are hosted on RapidAPI and share the same query parameter structure. The full OpenAPI definitions are at api.techmap.io/jobs-api (JSON API) and api.techmap.io/rss-api (RSS API).

Common developer use cases

  • Job board backfilling: Query /search with countryCode, industry, or job title filters and isDuplicate=false to backfill new job postings into your job board database.
  • Hiring trend analysis: Use /count with a dateCreated month range to build month-over-month hiring volume time series per country or industry. For time series longer than 3 months, use the historical datasets (available from Jan. 2020).
  • Company monitoring: Filter by company=Acme and isDirect=true to track open roles at specific companies.
  • Skill demand mapping: Query /count with skills and countryCode to measure demand for specific technologies per market.
  • Geo-targeted feeds: Use geoPointLat, geoPointLng, and geoDistance to retrieve postings within a radius of a specific location.

1.1 Which Product is Right for You?

Four access options are available depending on your use case:

Job Postings APIRSS APIData FeedsHistorical Datasets
AccessRapidAPIRapidAPIAWS Data ExchangeAWS Data Exchange
LookbackLast 3 monthsLast 3 monthsLast 3 monthsJan. 2020 to today
Output formatJSON (default), CSV, RSS, ATOM, XML, ParquetRSS 2.0 (default)JSON in gzip JSON Lines filesJSON in gzip JSON Lines files
BillingPer request (10 jobs each)Per request (10-1000 jobs each)Per country subscriptionPer country purchase
Best forReal-time queries, filtering, analytics, job board feedsHosted job boards that consume RSS (jBoard, NiceBoard, ...)Bulk ETL, recurring ingestion pipelinesHistorical analysis, ML training data, one-off research
Field referenceThis pageThis page (RSS section)Job Data OverviewJob Data Overview

1.2 How to Subscribe

Both APIs are hosted on RapidAPI. Sign up for a free account, subscribe to the Basic plan, and copy your API key. Include it as Authorization: Bearer <your-api-key> in every request header.

  1. Create a RapidAPI account: rapidapi.com/auth/sign-up
  2. Subscribe to the Basic plan: The Basic plan of the Job Postings API is free and includes 100 requests (1000 job postings) per month. The Basic plan of the RSS API is free and includes 30 requests (300 job postings) per month.
  3. Copy your API key: Found in your RapidAPI dashboard after subscribing.
  4. Make your first request: Use the RapidAPI playground which generates ready-to-use code snippets in Python, JavaScript, Java, C#, and more (see Job Postings API Playground or RSS API Playground) - or send a direct HTTP request.

2. Endpoints

Full OpenAPI definitions: Daily International Job Postings and Job Postings RSS.

Daily International Job Postings API Endpoints

(base URL: https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs):

  • GET /search - Returns up to 10 job postings per page matching the query. Available on all plans.
  • GET /count - Returns the total count matching the query without returning job data. Useful for analytics and pagination planning. Available on all plans.
  • GET /distinct - Returns distinct values and counts for a selected field (e.g., industry, workPlace, careerLevel) over the last 30 days. Available on ULTRA and MEGA plans.
  • GET /statistics - Returns statistical summaries (counts, averages, distributions) per field for the last 30 days. Available on ULTRA and MEGA plans.

Job Postings RSS API Endpoints

(base URL: https://job-postings-rss-feed.p.rapidapi.com/api/rss/v1):

  • GET /jobs_full - Returns job postings in RSS 2.0 (XML) format, including full description and metadata.

2.1 Query Parameters

Important: If dateCreated is not specified, the API defaults to today minus 2 days. Always set this parameter explicitly in production code to avoid unexpected results.

All parameters are optional. Text parameters support boolean operators (see below). Parameters marked search only are not available on /count.

ParameterTypeDescriptionExample
formatStringOutput format. Default: json. Options: json, csv, rss, atom, xml, parquet.format=csv
dateCreatedStringDate the posting was created. YYYY-MM for a full month, YYYY-MM-DD for a specific day. Defaults to today-2 if omitted.dateCreated=2026-05
dateCreatedMinStringStart of a date range (YYYY-MM-DD). Use with dateCreatedMax. Cannot be combined with dateCreated.dateCreatedMin=2026-05-01
dateCreatedMaxStringEnd of a date range (YYYY-MM-DD). Use with dateCreatedMin.dateCreatedMax=2026-05-31
pageIntegerPage number for page-based pagination, starting at 1. Max ~1000 pages (10000 results). Use cursor pagination beyond that. (search only)page=2
cursorStringCursor for cursor-based pagination. Pass true to start; use the nextCursor value from the response for subsequent pages. Cannot be combined with page. (search only)cursor=true
countryCodeStringISO 3166-1 alpha-2 country code of the job location.countryCode=de
titleStringFree-text search within the job title. Supports boolean operators.title="data engineer"
skillsStringSkills, keywords, or tags. Comma-separated for OR logic.skills=Javascript,Typescript
companyStringCompany name. Supports boolean operators.company=Microsoft
occupationStringOccupation stem extracted from the job title (e.g., "programmer", "analyst").occupation=programmer
industryStringIndustry classification. Supports boolean operators.industry=healthcare
departmentStringDepartment name (sparsely populated).department=IT
languageStringISO 639-1 language code of the job posting text.language=de
workPlaceStringWork arrangement. Values: remote, hybrid, onsite. Only populated when stated in the original posting.workPlace=remote
workTypeStringWork duration. E.g., fulltime, parttime.workType=fulltime
contractTypeStringContract type. E.g., permanent, temporary, freelance.contractType=permanent
careerLevelStringCareer level. E.g., junior, senior, chief.careerLevel=Senior
hasSalaryBooleanFilter to postings that include salary data.hasSalary=true
minSalaryNumberMinimum salary filter, independent of currency.minSalary=50000
isDuplicateBooleanWhen false, excludes postings flagged as duplicates (same company, city, country, and title within 3 days).isDuplicate=false
isActiveBooleanWhen true, only returns postings where dateActive is in the future. dateActive is derived from the schema.org validThrough field, or defaults to dateCreated + 30 days.isActive=true
isDirectBooleanWhen true, only returns postings linked directly to the hiring company (not via a job board).isDirect=true
isRecruiterBooleanFilter by whether the posting is from a recruiting firm.isRecruiter=false
portalStringSource portal key (e.g., linkedin, monster, dice). See the portal explorer for all values.portal=linkedin
sourceStringSpecific source with country code suffix (e.g., linkedin_us, monster_uk).source=linkedin_us
cityStringCity of the job location. Use quotes for multi-word cities.city="New York"
stateStringState of the job location.state=TX
postCodeStringPostal or ZIP code of the job location.postCode=10001
timezoneString3-letter timezone code (e.g., CET, PST, UTC).timezone=CET
timezoneOffsetIntegerUTC offset as an integer (-12 to +12).timezoneOffset=1
timezoneMinIntegerMinimum UTC offset. Use with timezoneMax to define a range.timezoneMin=-8
timezoneMaxIntegerMaximum UTC offset. Must be larger than timezoneMin.timezoneMax=-5
geoPointLatNumberLatitude for a geo distance search. Use with geoPointLng and geoDistance.geoPointLat=37.757
geoPointLngNumberLongitude for a geo distance search.geoPointLng=-122.449
geoDistanceStringDistance from the geo point. Units: mi or km.geoDistance=50mi
geoTopLeftLatNumberTop-left latitude of a bounding box search.geoTopLeftLat=52.5
geoTopLeftLngNumberTop-left longitude of a bounding box search.geoTopLeftLng=13.0
geoBottomRightLatNumberBottom-right latitude of a bounding box search.geoBottomRightLat=48.0
geoBottomRightLngNumberBottom-right longitude of a bounding box search.geoBottomRightLng=15.0

2.2 Boolean Operators

Most text parameters support boolean operators for precise filtering:

  • OR (default): Comma-separated values match any. title=java,python returns jobs with "java" or "python" in the title.
  • AND (must include): Prefix with %2B (an URL-encoded +). skills=%2Bjava,%2Bpython requires both.
  • NOT (must exclude): Prefix with -. title=data,%2Bengineer,-scientist matches "data engineer" but not "data scientist".
  • Exact phrase: Wrap in double quotes ("). title="data engineer" matches the exact phrase.

Example cURL queries:

  • Remote jobs in core US timezones (UTC-8 to UTC-5):
    curl -X GET "https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs/count?workPlace=remote&timezoneMin=-8&timezoneMax=-5" -H "Authorization: Bearer <your-token>"
  • Python or Spark jobs in Germany:
    curl -X GET "https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs/count?countryCode=de&skills=Python,Spark" -H "Authorization: Bearer <your-token>"
  • Jobs within 50 miles of San Francisco:
    curl -X GET "https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs/count?geoPointLat=37.757&geoPointLng=-122.449&geoDistance=50mi" -H "Authorization: Bearer <your-token>"

2.3 Pagination

The /search endpoint returns 10 job postings per page. Use totalCount from the response to determine how many pages exist.

Page-based pagination

Use the page parameter (starting at 1) for result sets up to approximately 10000 records. If you expect more pages, use cursor-based pagination.

Cursor-based pagination

For large result sets (e.g. all jobs in the US for a given month), pass cursor=true on the first request. The response includes a nextCursor field when more results exist. Pass that value as cursor in the next request. Stop when nextCursor is absent from the response. Cursor-based pagination cannot be combined with the page parameter. However, think about using the data feeds if you want to access many job postings on a regular schedule - it might be the easier and cheaper option.

2.4 Code Examples

The RapidAPI playground generates ready-to-use code snippets in Python, JavaScript, Java, C#, PHP, and more. Open the API playground page on RapidAPI (see Job Postings API Playground or RSS API Playground), configure your query parameters, and copy the generated snippet.

Page-based pagination (Python)

Fetch all jobs from Germany for a given month. Use for result sets up to ~10000 records.

import requests

API_URL = "https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs"
HEADERS = {"Authorization": "Bearer <your-api-key>"}

params = {
    "countryCode": "de",
    "dateCreated": "2026-05",
    "isDuplicate": "false",
}
page, all_jobs = 1, []

while True:
    resp = requests.get(f"{API_URL}/search", headers=HEADERS, params={**params, "page": page})
    resp.raise_for_status()
    data = resp.json()
    batch = data.get("result", [])
    all_jobs.extend(batch)
    if len(all_jobs) >= data["totalCount"] or not batch:
        break
    page += 1

print(f"Fetched {len(all_jobs)} jobs")

Cursor-based pagination (Python)

Fetch all jobs from the US for a given month. Use for large result sets (>10000 records).

import requests

API_URL = "https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs"
HEADERS = {"Authorization": "Bearer <your-api-key>"}

params = {
    "countryCode": "us",
    "dateCreated": "2026-05",
    "isDuplicate": "false",
}
cursor, all_jobs = "true", []

while cursor:
    resp = requests.get(f"{API_URL}/search", headers=HEADERS, params={**params, "cursor": cursor})
    resp.raise_for_status()
    data = resp.json()
    all_jobs.extend(data.get("result", []))
    cursor = data.get("nextCursor")  # None when no more results remain

print(f"Fetched {len(all_jobs)} jobs")

Count query for analytics (Python)

Get monthly job posting counts per country without fetching job data.

import requests

API_URL = "https://daily-international-job-postings.p.rapidapi.com/api/v2/jobs"
HEADERS = {"Authorization": "Bearer <your-api-key>"}

months = ["2026-03", "2026-04", "2026-05"]
countries = ["de", "fr", "gb"]

for country in countries:
    for month in months:
        resp = requests.get(f"{API_URL}/count", headers=HEADERS, params={
            "countryCode": country,
            "dateCreated": month,
            "isDuplicate": "false",
        })
        data = resp.json()
        print(f"{country} {month}: {data.get('totalCount', 0)} jobs")

2.5 Error Handling

StatusSourceMeaningAction
200APISuccessProcess the response
400APIBad request - invalid parameter value (e.g., unparseable date format)Check the error.reason field in the response body and fix the parameter
401RapidAPIMissing or invalid API keyCheck that the Authorization: Bearer header is present and correct
403API / RapidAPISubscription plan does not have access to this endpoint (e.g., /distinct requires ULTRA+)Check the message field; upgrade the plan if needed
429RapidAPIMonthly quota or rate limit exceededWait until the quota resets or upgrade the plan. Implement exponential backoff for rate limit errors.
500APIInternal server errorRetry with exponential backoff. Check the message field for details.

Example 400 response body:

{ "error": { "type": "search_phase_execution_exception", "reason": "cannot parse empty date" } }

Example 403 response body:

{ "message": "Forbidden request to the API. BASIC subscription plan is NOT sufficient." }

3. Data Dictionary

The full text of each job posting is in job.jsonLD.description as Markdown. The job.jsonLD object is a simple schema.org JobPosting representation and can be embedded directly in a webpage for structured data markup.

Response envelope fields

Top-level fields returned by /search:

FieldTypeDescriptionExample
apiStringThe name of the APITechmap.io Job Posting API
apiVersionStringVersion of the endpoint v2.1
apiEndpointStringName of the endpointGET search result for Job Postings ...
pageIntegerPage number returned from pagination1
pageSizeIntegerMax. number of job postings per result10
totalCountIntegerTotal amount of job postings in the pagination.1069346
queryObjectThe query understood and used to query the Database.... see Example below ...
resultArray(Object)The array with the job postings as objects. (named 'job' below)... see job fields below ...
nextCursorStringPresent when cursor-based pagination is active and more results exist. Pass this value as the cursor parameter in the next request. Absent on the last page.eyJwYWdlIjozfQ==

Job posting fields (result[])

Each element in the result array contains these fields. Not all fields are populated for every posting - sparsely populated fields include state, postCode, department, workPlace, careerLevel, and salary fields.

FieldTypeDescriptionExample
job.titleStringTitle or name of the job postingSAP TM (Transportation Module) Functional Analyst
job.companyStringName of the company originally stated on the job posting or in its JSON.Avance Consulting
job.departmentStringName of the department in the company such as sales, finance, it, ... (very rare)IT
job.dateCreatedDateThe date and time the job posting was created by the company (as stated on the page or its JSON).2024-09-15T14:43:24.000Z
job.dateExpiredString (Date)The given date the posting is valid.2024-10-14T14:48:29.000Z
job.countryCodeString (ISO3166)The country code (from ISO3166) the job posting is located, e.g., 'us'.us
job.stateStringState the job is located in (rare).TX
job.cityStringCity the job is located in.Cleveland
job.postCodeStringPostal or Zip code of the job is located in (rare).77327
job.geoPointObjectThe geocoordinate object with latitude and longitude.{"lon": -95.02362, "lat": 30.33804}
job.timezoneString (Timezone)Timezone code (3-letters)CST
job.timezoneOffsetIntegerTimezone offset between -12 and +12 from GMT/UTC-6
job.hasSalaryBooleanIndicates if the job posting has salary information.True
job.minSalaryNumberThe minimum salary of the position.50000.00
job.workPlaceArray (String)List of workplaces such as Remote, Hybrid, Onsite, Field, ...["Onsite"]
job.careerLevelArray (String)List of career levels such as Junior, Senior, ...["Senior"]
job.contractTypeArray (String)List of contract types such as Permanent, Temporary, ...["DirectEmployment"]
job.workTypeArray (String)List of work types such as Fulltime, Parttime, ...["Permanent"]
job.languageString(ISOISO 639-1)Language the job posting is written in such as en, es, de, ...en
job.localeStringThe Locale of the job posting such as en_US, en_UK, de_CH, ...en_US
job.occupationStringThe job name reduced to a stem form (e.g., 'java programmer')Functional Analyst
job.skillsArray(String)The skills stated or identified with the job posting["Logistics","Autoconf","ABAP"]
job.industryStringThe industry stated or identified with the job postingTransport
job.isRecruiterBooleanIndicates if the job posting is from a Recruiting firm.False
job.isDirectBooleanIndicates if the job posting is directly from a company page or a job board.True
job.isDuplicateBooleanTrue if a posting with the same company, city, country, and job title was already seen within 3 days. Duplicates are kept but flagged. Use isDuplicate=false as a query filter to exclude them.false
job.isDuplicateOfStringThe ID of the earliest identical posting this one duplicates. Null when isDuplicate is false.66f4d794a315a1138e6bfac2
job.isActiveBoolean (query filter only)Not a stored field. When isActive=true is passed as a query parameter, the API filters to postings where dateActive is in the future. The dateActive field (see below) determines this.true
job.dateActiveString (Date)The assumed expiry date of the posting, derived from schema.org validThrough or defaulting to dateCreated + 30 days.2024-10-14T14:48:29.000Z
job.portalStringThe origin of the job posting such as monster, linkedin, ...dice
job.sourceStringThe origin of the job posting with a countrycode such as 'monster_uk'.dice_us
job.jsonLDObjectThe JSON-LD based on schema.org format from the original job posting's page enriched with job posting data. Can be directly used on a webpage.... see job.jsonLD below ...
job.jsonLD.identifierStringID of the job posting in Techmap's central database.67a0d794a315a1138e6bfaba
job.jsonLD.validThroughString (Date)The given date the posting is valid.2024-10-14T14:48:29.000Z
job.jsonLD.employmentTypeStringThe main employment type such as Permanent, Temporary, ...Direct Employment
job.jsonLD.salaryCurrencyStringThe currency the salary is defined in.USD
job.jsonLD.descriptionStringThe text of the job posting extracted from the webpage in markdown.... ful text in markdown ...
job.jsonLD.industryStringThe industry stated or identified with the job postingTransport
job.jsonLD.titleStringTitle or name of the job postingSAP TM (Transportation Module) Functional Analyst
job.jsonLD.datePostedDateThe date and time the job posting was created by the company (as stated on the page or its JSON).2024-09-15T14:43:24.000Z
job.jsonLD.urlString (URL)The link where we found the job posting.https://www.dice.com/job-detail/003170f7-bd59-45d5-a0cf-e4ef93c27419
job.jsonLD .relevantOccupationStringTitle or name of the job postingFunctional Analyst
job.jsonLD .applicantLocationRequirementsStringRequirements on the location of the applicant.Onsite, CST Timezone
job.jsonLD.employmentUnitStringName of the employment unit or department in the company such as sales, finance, it, ... (very rare)IT
job.jsonLD.skillsArray(String)The skills stated or identified with the job posting["Logistics","Autoconf","ABAP"]
job.jsonLD.hiringOrganizationObjectThe information on the hiring company.... see job.jsonLD.hiringOrganization below ...
job.jsonLD.hiringOrganization .nameStringName of the company originally stated on the job posting or in its JSON.Avance Consulting
job.jsonLD.hiringOrganization .logoString (URL)Link to Logo of the company cached by techmap.https://s3.eu-central-1.amazonaws.com/images.techmap.io/dice_us-d865fc5a-e0ad-57a6-9e0f-45350b82af37-logo.png
job.jsonLD.hiringOrganization .urlString (URL)Website of the company originally stated on the job posting or in its JSON.https://example.com
job.jsonLD.hiringOrganization .identifierStringID of the company in Techmap's central database.5e1e4a2d824199645bd7e6a8
job.jsonLD.jobLocationObjectThe information on the job location.... see job.jsonLD.jobLocation below ...
job.jsonLD.jobLocation .identifierStringID of the location in Techmap's central database.5f5e4ed75151ac3cb7851ab1
job.jsonLD.jobLocation .nameStringThe location string as see on the job posting's webpage.Berlin, Germany
job.jsonLD.jobLocation .latitudeNumberThe location's latitude.30.33804
job.jsonLD.jobLocation .longitudeNumberThe location's longitude.-95.02362
job.jsonLD.jobLocation .addressObjectThe information on the job address.... see job.jsonLD.jobLocation.address below ...
job.jsonLD.jobLocation .address.addressCountryStringThe country as see on the job posting's webpage.United States
job.jsonLD.jobLocation .address.addressRegionStringThe state as see on the job posting's webpage.TX
job.jsonLD.jobLocation .address.addressLocalityStringThe city as see on the job posting's webpage.Cleveland
job.jsonLD.jobLocation .address.postalCodeStringPostal or Zip code of the job is located in.77327

The RSS API response follows the RSS 2.0 specification and includes: title, description, pubDate, link, guid, category, location, city, state, country, company, company_url, company_logo, workType, contractType, industry, careerLevel, workPlace, skills, department, and occupation.

3.1 Data Samples

JSON response example

The /search response follows the JSON ECMA-404 specification.

{
  "api": "Techmap.io Job Posting API",
  "apiVersion": "v2.6",
  "page": 1,
  "pageSize": 10,
  "totalCount": 1069346,
  "result": [
    {
      "occupation": "Functional Analyst",
      "dateActive": "2024-10-14T14:48:29.000Z",
      "city": "Cleveland",
      "timezone": "CST",
      "contractType": ["DirectEmployment"],
      "language": "en",
      "industry": "Transport",
      "isDuplicate": false,
      "isDuplicateOf": null,
      "isDirect": false,
      "isRecruiter": false,
      "hasSalary": false,
      "jsonLD": {
        "identifier": "66f4d794a315a1138e6bfac2",
        "validThrough": "2024-10-14T14:48:29.000Z",
        "employmentType": "Direct Employment",
        "@type": "JobPosting",
        "salaryCurrency": "USD",
        "description": "**Job Description:** ...",
        "industry": "Transport",
        "title": "SAP TM Functional Analyst",
        "@context": "https://schema.org",
        "url": "https://www.dice.com/job-detail/003170f7-bd59-45d5-a0cf-e4ef93c27419",
        "relevantOccupation": "Functional Analyst",
        "skills": ["Logistics", "SAP TM", "ABAP"],
        "hiringOrganization": {
          "@type": "Organization",
          "name": "Example Corp",
          "url": "https://example.com"
        },
        "jobLocation": {
          "address": {
            "addressCountry": "United States",
            "@type": "PostalAddress",
            "addressLocality": "Cleveland",
            "addressRegion": "TX"
          },
          "@type": "Place",
          "latitude": 30.33804,
          "longitude": -95.02362
        },
        "datePosted": "2024-09-15"
      },
      "source": "dice_us",
      "locale": "en_US",
      "geoPoint": { "lon": -95.02362, "lat": 30.33804 },
      "title": "SAP TM Functional Analyst",
      "skills": ["Logistics", "SAP TM", "ABAP"],
      "dateCreated": "2024-09-15T14:43:24.000Z",
      "timezoneOffset": -6,
      "countryCode": "us",
      "company": "Example Corp",
      "state": "TX",
      "portal": "dice",
      "workPlace": ["Onsite"],
      "careerLevel": ["N/A"],
      "workType": ["N/A"],
      "postCode": "77327"
    }
  ],
  "resultSizeInBytes": 59203
}

RSS response example

The /jobs_full endpoint returns RSS 2.0 format.

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Techmap.io Job Posting RSS Feed API</title>
    <link>https://job-postings-rss-feed.p.rapidapi.com/api/rss/v1/jobs_full?dateCreated=2024-09&amp;countryCode=us</link>
    <description>Techmap.io Job Posting API in RSS 2.0 format.</description>
    <pubDate>Mon, 16 Sep 2024 08:59:01 GMT</pubDate>
    <ttl>1440</ttl>
    <page>1</page>
    <pageSize>10</pageSize>
    <totalCount>1069251</totalCount>
    <item>
      <title>Entry-Level Technician</title>
      <description>We are looking for ...</description>
      <pubDate>Sun, 15 Sep 2024 05:00:00 GMT</pubDate>
      <link>https://careers-example.icims.com/jobs/55300/job</link>
      <guid>https://careers-example.icims.com/jobs/55300/job</guid>
      <category>Technician</category>
      <city>Portland</city>
      <state>OR</state>
      <country>United States</country>
      <company>Example Company</company>
      <industry>Trade</industry>
      <careerLevel>Junior</careerLevel>
      <workPlace>Onsite</workPlace>
      <occupation>Technician</occupation>
    </item>
  </channel>
</rss>

4. References

Try It Out

Start with 1000 free job postings per month on the Basic plan. No credit card required.

Questions? Contact us if something is unclear or if you want sample data.