# Himalayas

> Search Himalayas, the remote-only job board, through its free public API. One search covers everything the board knows about a job: the words in it, the country you can work from, whether it is open worldwide, the timezone it expects you in, the level, the employment type, the employer and what it pays. Read the board in posting order to copy it somewhere or to run a daily digest that never repeats itself, pull one job in full from its link, and see who is hiring. Every description arrives as plain text rather than HTML, and every job carries its pay written out and the link to apply. No account or API key is required.

App · Jobs & Hiring · 4 actions. Web page: https://docs.lodol.com/docs/integrations/himalayas

## Actions

### Get a job

Fetch one job by its Himalayas link, with the whole description both as plain text and as the original HTML. This is the step for a link that arrived from somewhere else, in a message or a spreadsheet. Himalayas publishes only what is open right now, so a role that has been filled or has expired is reported as not found.

**Inputs**

- Job link (`job`, text, required): The job's page on Himalayas, which every other action returns as both 'url' and 'id', so either can be passed straight in. It looks like https://himalayas.app/companies/evaboot/jobs/agentic-python-engineer. This field has no example to click because a link only works while the job is open: take one from a listing step in the same run.
- Show in the run (`output_detail`, text): How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the result limit above decides that, not this field. 'One line each' gives the job, the company, who may apply, the pay and how long ago it was posted; 'Every field' adds the experience level, the timezones, the categories and the description. This only changes what is displayed, never what is saved: a later step sees the same data whichever is chosen. Defaults to one line each. One of: `summary` (One line each), `full` (Every field, over several lines each). Default: `summary`.

**Outputs**

- `attribution` (text): The credit Himalayas asks for when these results are published.
- `company_slug` (text): The company the job was found under.
- `description_html` (text): The description as Himalayas publishes it, HTML and all.
- `job` (object)
- `output_detail` (text): Which of the two display choices the step ran with, 'summary' or 'full'.
- `updated_at` (text): When Himalayas last rebuilt its data, as ISO-8601 UTC.

**Example output**

```json
{
  "attribution": "Job data from Himalayas (https://himalayas.app). Himalayas asks that anything published from this API links back to himalayas.app and credits Himalayas as the source. Every job carries its own 'url' for that link.",
  "company_slug": "evaboot",
  "description_html": "<p>Evaboot turns LinkedIn Sales Navigator searches into clean, verified prospecting lists.</p>",
  "job": {
    "age_days": 3,
    "categories": [
      "Python-Engineer",
      "Agentic-AI-Engineer",
      "AI-Engineer"
    ],
    "company_logo": "https://cdn-images.himalayas.app/2bjck1nhbrb4s7i49b7y1srfn0qj",
    "company_name": "Evaboot",
    "company_slug": "evaboot",
    "description": "Evaboot turns LinkedIn Sales Navigator searches into clean, verified prospecting lists.\n\nYou will own the agentic pipelines end to end:\n- Design and ship Python services that call LLMs in a loop\n- Keep the extraction accurate as LinkedIn changes underneath us\n- Work directly with the founders on what to build next",
    "description_truncated": false,
    "employment_type": "Full Time",
    "excerpt": "Evaboot turns LinkedIn Sales Navigator searches into clean, verified prospecting lists.",
    "expires_at_iso": "2026-09-30T18:29:47Z",
    "id": "https://himalayas.app/companies/evaboot/jobs/agentic-python-engineer",
    "locations": [],
    "max_salary": 120000,
    "min_salary": 70000,
    "parent_categories": [
      "Developer"
    ],
    "posted_at": 1788188988,
    "posted_at_iso": "2026-08-31T18:29:48Z",
    "salary": "USD 70,000 - 120,000 a year",
    "salary_currency": "USD",
    "salary_period": "annual",
    "seniority": [
      "Mid-level"
    ],
    "timezones": [
      "UTC-05:00",
      "UTC+00:00",
      "UTC+01:00"
    ],
    "title": "Agentic Python Engineer",
    "url": "https://himalayas.app/companies/evaboot/jobs/agentic-python-engineer",
    "worldwide": true
  },
  "output_detail": "summary",
  "updated_at": "2026-09-03T19:36:51Z"
}
```

### List companies hiring

List the companies hiring on Himalayas, most open roles first, each with the short name the search's company filter takes and a link to its newest posting. Himalayas publishes no company index, so this counts the companies across the hundred newest jobs that match: use it to see who is hiring rather than what is open.

**Inputs**

- Keywords (`keywords`, text): What the job should be about, in your own words. Himalayas runs its own search over the title, the company and the description and ranks the results. Leave empty to see everything the other filters allow.
- Country you can work from (`country`, text): Only return jobs somebody living in this country may take. That includes jobs open worldwide, because those are open to this country too. Leave empty to see the whole board. One of: `AF` (Afghanistan), `AX` (Åland Islands), `AL` (Albania), `DZ` (Algeria), `AS` (American Samoa), `AD` (Andorra), `AO` (Angola), `AI` (Anguilla), `AQ` (Antarctica), `AG` (Antigua and Barbuda), and 239 more.
- Number of companies (`max_results`, number): How many companies to return, most open roles first, from 1 to 200. Defaults to 50. From 1 to 200. Default: `50`.
- Show in the run (`output_detail`, text): How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the result limit above decides that, not this field. 'One line each' gives the job, the company, who may apply, the pay and how long ago it was posted; 'Every field' adds the experience level, the timezones, the categories and the description. This only changes what is displayed, never what is saved: a later step sees the same data whichever is chosen. Defaults to one line each. One of: `summary` (One line each), `full` (Every field, over several lines each). Default: `summary`.

**Outputs**

- `attribution` (text): The credit Himalayas asks for when these results are published.
- `companies` (list)
- `company_count` (number): How many distinct companies were found.
- `has_more` (true/false): Whether Himalayas had further pages when the count stopped.
- `keywords` (text): The keywords that were searched.
- `output_detail` (text): Which of the two display choices the step ran with, 'summary' or 'full'.
- `result_count` (number): How many rows are returned.
- `scanned_count` (number): How many jobs were counted.
- `scanned_pages` (number): How many pages that took.
- `updated_at` (text): When Himalayas last rebuilt its data, as ISO-8601 UTC.

**Example output**

```json
{
  "attribution": "Job data from Himalayas (https://himalayas.app). Himalayas asks that anything published from this API links back to himalayas.app and credits Himalayas as the source. Every job carries its own 'url' for that link.",
  "companies": [
    {
      "company_logo": "https://cdn-images.himalayas.app/micro1",
      "company_name": "micro1",
      "company_slug": "micro1",
      "job_count": 3,
      "latest_job_title": "GitHub Contributor",
      "latest_job_url": "https://himalayas.app/companies/micro1/jobs/github-contributor",
      "latest_posted_at_iso": "2026-09-03T19:30:14Z",
      "worldwide_count": 3
    }
  ],
  "company_count": 68,
  "has_more": true,
  "keywords": "",
  "output_detail": "summary",
  "result_count": 1,
  "scanned_count": 100,
  "scanned_pages": 5,
  "updated_at": "2026-09-03T19:36:51Z"
}
```

### List the newest jobs

Read the board in the order it was posted, newest first, with no ranking and no filtering. This is the feed itself rather than a search of it, which makes it the step for the two things a search cannot do. To copy the board into a sheet or a database, feed each run's 'next_cursor' into the next run and it carries on exactly where the last one stopped, never repeating a job. For a scheduled digest, give it the moment the last run finished and it returns only what has appeared since, so an alert never repeats itself.

**Inputs**

- Posted since (`since`, date and time): Only return jobs posted after this date and time. Leave empty for the newest jobs however old. This is what turns the step into a digest: give it the time the last run finished and nothing repeats. A date on its own means midnight, a time with no time zone is read as UTC, which is what the board posts in, and a job's own 'posted_at' number works here too.
- Continue from (`cursor`, text): Leave empty to start at the newest job. To read further down the board, pass the 'next_cursor' from a previous run of this step; it picks up exactly where that one stopped. An empty 'next_cursor' means the end of the board has been reached.
- Number of jobs (`max_results`, number): How many jobs to return, from 1 to 100. Himalayas serves twenty at a time, so a larger number is a slower step. Defaults to 25. From 1 to 100. Default: `25`.
- Description length (`description_characters`, number): How much of each job's description to return, as plain text with the HTML removed, up to 20,000 characters. Set 0 to leave descriptions out entirely when a step only needs titles, pay and links. Defaults to 600. From 0 to 20000. Default: `600`.
- Show in the run (`output_detail`, text): How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the result limit above decides that, not this field. 'One line each' gives the job, the company, who may apply, the pay and how long ago it was posted; 'Every field' adds the experience level, the timezones, the categories and the description. This only changes what is displayed, never what is saved: a later step sees the same data whichever is chosen. Defaults to one line each. One of: `summary` (One line each), `full` (Every field, over several lines each). Default: `summary`.

**Outputs**

- `attribution` (text): The credit Himalayas asks for when these results are published.
- `has_more` (true/false): Whether the feed had further pages when the read stopped.
- `jobs` (list)
- `next_cursor` (text): Where the feed got to. Feed this back into 'Continue from' to read the next stretch; empty means the end of the feed.
- `output_detail` (text): Which of the two display choices the step ran with, 'summary' or 'full'.
- `result_count` (number): How many jobs are returned.
- `scanned_count` (number): How many jobs were read from the feed.
- `scanned_pages` (number): How many pages that took.
- `since` (text): The cut-off that was used, as ISO-8601 UTC, empty when the whole feed was read.
- `total_count` (number): How many jobs are on the whole board.
- `truncated` (true/false): Whether the limit was reached with the feed still running, so there may be more.
- `updated_at` (text): When Himalayas last rebuilt its data, as ISO-8601 UTC.

**Example output**

```json
{
  "attribution": "Job data from Himalayas (https://himalayas.app). Himalayas asks that anything published from this API links back to himalayas.app and credits Himalayas as the source. Every job carries its own 'url' for that link.",
  "has_more": true,
  "jobs": [
    {
      "age_days": 3,
      "categories": [
        "Python-Engineer",
        "Agentic-AI-Engineer",
        "AI-Engineer"
      ],
      "company_logo": "https://cdn-images.himalayas.app/2bjck1nhbrb4s7i49b7y1srfn0qj",
      "company_name": "Evaboot",
      "company_slug": "evaboot",
      "description": "Evaboot turns LinkedIn Sales Navigator searches into clean, verified prospecting lists.\n\nYou will own the agentic pipelines end to end:\n- Design and ship Python services that call LLMs in a loop\n- Keep the extraction accurate as LinkedIn changes underneath us\n- Work directly with the founders on what to build next",
      "description_truncated": false,
      "employment_type": "Full Time",
      "excerpt": "Evaboot turns LinkedIn Sales Navigator searches into clean, verified prospecting lists.",
      "expires_at_iso": "2026-09-30T18:29:47Z",
      "id": "https://himalayas.app/companies/evaboot/jobs/agentic-python-engineer",
      "locations": [],
      "max_salary": 120000,
      "min_salary": 70000,
      "parent_categories": [
        "Developer"
      ],
      "posted_at": 1788188988,
      "posted_at_iso": "2026-08-31T18:29:48Z",
      "salary": "USD 70,000 - 120,000 a year",
      "salary_currency": "USD",
      "salary_period": "annual",
      "seniority": [
        "Mid-level"
      ],
      "timezones": [
        "UTC-05:00",
        "UTC+00:00",
        "UTC+01:00"
      ],
      "title": "Agentic Python Engineer",
      "url": "https://himalayas.app/companies/evaboot/jobs/agentic-python-engineer",
      "worldwide": true
    }
  ],
  "next_cursor": "MjAyNi0wOS0wM1QxODowNzoyNC4zODM5NzZafDIxNDg2MzU",
  "output_detail": "summary",
  "result_count": 1,
  "scanned_count": 20,
  "scanned_pages": 1,
  "since": "",
  "total_count": 101642,
  "truncated": true,
  "updated_at": "2026-09-03T19:36:51Z"
}
```

### Search jobs

Search every remote job on Himalayas, narrowed by any combination of what the board knows about a job: keywords, the country you can work from, whether it is open worldwide, the timezone it expects you in, experience level, employment type, employer, what it pays and how recently it was posted. Leave every field empty to browse the whole board in Himalayas' own order.

**Inputs**

- Keywords (`keywords`, text): What the job should be about, in your own words. Himalayas runs its own search over the title, the company and the description and ranks the results. Leave empty to see everything the other filters allow.
- Country you can work from (`country`, text): Only return jobs somebody living in this country may take. That includes jobs open worldwide, because those are open to this country too. Leave empty to see the whole board. One of: `AF` (Afghanistan), `AX` (Åland Islands), `AL` (Albania), `DZ` (Algeria), `AS` (American Samoa), `AD` (Andorra), `AO` (Angola), `AI` (Anguilla), `AQ` (Antarctica), `AG` (Antigua and Barbuda), and 239 more.
- Eligibility (`eligibility`, text): A remote job either names the countries a candidate has to live in, or is open worldwide with no restriction at all. Leave this empty for both kinds, which is usually what you want. 'Only jobs that name a country' narrows the country above rather than replacing it, so it needs a country chosen as well. One of: `worldwide` (Only jobs open worldwide), `country` (Only jobs that name a country).
- Timezone you work in (`timezone_offset`, text): Only return jobs whose working hours overlap this UTC offset. This is the other half of whether a remote job is workable: a role open to your country can still expect you online at three in the morning. A job that states no timezone requirement is not returned when this is set, so leave it empty unless the hours matter. A job's own 'timezones' values, such as 'UTC+05:30', can be passed straight in. One of: `-12` (UTC-12:00), `-11` (UTC-11:00), `-10` (UTC-10:00), `-9.5` (UTC-09:30), `-9` (UTC-09:00), `-8` (UTC-08:00), `-7` (UTC-07:00), `-6` (UTC-06:00), `-5` (UTC-05:00), `-4` (UTC-04:00), and 28 more.
- Experience level (`seniority`, list): Only return jobs at one of these levels. A job can accept more than one, so a posting open to both mid-level and senior candidates appears under either. Choose none for every level. One or more of: `Entry-level` (Entry level), `Mid-level` (Mid level), `Senior`, `Manager`, `Director`, `Executive`.
- Employment type (`employment_type`, list): Only return jobs of these kinds. 'Contract or freelance' is one category on this board and covers both. Choose none for every kind. One or more of: `Full Time`, `Part Time`, `Contractor` (Contract or freelance), `Temporary`, `Intern` (Internship), `Volunteer`, `Other`.
- Company (`company`, text): Only return jobs at this employer. The list names the companies posting right now, and any other can be typed in: Himalayas knows a company by a short name such as 'servicetitan', which is what every job returns as its 'company_slug'. Typing the company's name works too. Leave empty for every company.
- Pays at least (a year) (`min_salary`, number): Only return jobs whose published pay reaches this figure over a year. An hourly, weekly, fortnightly or monthly rate is converted to a year first, so an advertised 100 an hour counts as 208,000. The comparison is made in each job's own currency and no exchange rate is applied, because the API publishes none. Roughly one job in three publishes what it pays, and setting any figure here leaves out the rest, so leave it empty unless pay is the point. From 0 to 10000000.
- Posted in the last (days) (`posted_within_days`, number): Only return jobs posted this many days ago or less. Leave empty for everything, however old. From 1 to 365.
- Order (`sort`, text): What to put at the top. 'Best match' is Himalayas' own ranking against the keywords and filters. 'Newest first' and 'Highest pay first' both order the jobs this step returns, and jobs that do not say what they pay sort last; pair 'Highest pay first' with a pay floor to leave those out altogether. One of: `relevant` (Best match), `recent` (Newest first), `salaryDesc` (Highest pay first). Default: `relevant`.
- Number of jobs (`max_results`, number): How many jobs to return, from 1 to 100. Himalayas serves twenty at a time, so a larger number is a slower step. Defaults to 25. From 1 to 100. Default: `25`.
- Description length (`description_characters`, number): How much of each job's description to return, as plain text with the HTML removed, up to 20,000 characters. Set 0 to leave descriptions out entirely when a step only needs titles, pay and links. Defaults to 600. From 0 to 20000. Default: `600`.
- Show in the run (`output_detail`, text): How much of each row to print into the run output for a person to read. Every row that was returned is listed either way, however many that is: the result limit above decides that, not this field. 'One line each' gives the job, the company, who may apply, the pay and how long ago it was posted; 'Every field' adds the experience level, the timezones, the categories and the description. This only changes what is displayed, never what is saved: a later step sees the same data whichever is chosen. Defaults to one line each. One of: `summary` (One line each), `full` (Every field, over several lines each). Default: `summary`.

**Outputs**

- `attribution` (text): The credit Himalayas asks for when these results are published.
- `company` (text): The company slug that was filtered on, empty for every company.
- `country` (text): The country that was filtered on, empty for the whole board.
- `has_more` (true/false): Whether Himalayas had further pages when the scan stopped.
- `jobs` (list)
- `keywords` (text): The keywords that were searched.
- `output_detail` (text): Which of the two display choices the step ran with, 'summary' or 'full'.
- `result_count` (number): How many jobs are returned.
- `scanned_count` (number): How many jobs were actually read to fill this result.
- `scanned_pages` (number): How many pages that took.
- `sort` (text): The order that was asked for.
- `timezone` (text): The offset that was filtered on, e.g. 'UTC+05:30', empty for every timezone.
- `total_count` (number): How many jobs Himalayas says match the filters, across every page. It counts on its side and pages before it filters, so a page can hand back fewer rows than this suggests; it caps at 5,000 for a broad search.
- `truncated` (true/false): Whether the limit was reached with matches still unread, so there may be more.
- `updated_at` (text): When Himalayas last rebuilt its data, as ISO-8601 UTC.

**Example output**

```json
{
  "attribution": "Job data from Himalayas (https://himalayas.app). Himalayas asks that anything published from this API links back to himalayas.app and credits Himalayas as the source. Every job carries its own 'url' for that link.",
  "company": "",
  "country": "DE",
  "has_more": true,
  "jobs": [
    {
      "age_days": 3,
      "categories": [
        "Python-Engineer",
        "Agentic-AI-Engineer",
        "AI-Engineer"
      ],
      "company_logo": "https://cdn-images.himalayas.app/2bjck1nhbrb4s7i49b7y1srfn0qj",
      "company_name": "Evaboot",
      "company_slug": "evaboot",
      "description": "Evaboot turns LinkedIn Sales Navigator searches into clean, verified prospecting lists.\n\nYou will own the agentic pipelines end to end:\n- Design and ship Python services that call LLMs in a loop\n- Keep the extraction accurate as LinkedIn changes underneath us\n- Work directly with the founders on what to build next",
      "description_truncated": false,
      "employment_type": "Full Time",
      "excerpt": "Evaboot turns LinkedIn Sales Navigator searches into clean, verified prospecting lists.",
      "expires_at_iso": "2026-09-30T18:29:47Z",
      "id": "https://himalayas.app/companies/evaboot/jobs/agentic-python-engineer",
      "locations": [],
      "max_salary": 120000,
      "min_salary": 70000,
      "parent_categories": [
        "Developer"
      ],
      "posted_at": 1788188988,
      "posted_at_iso": "2026-08-31T18:29:48Z",
      "salary": "USD 70,000 - 120,000 a year",
      "salary_currency": "USD",
      "salary_period": "annual",
      "seniority": [
        "Mid-level"
      ],
      "timezones": [
        "UTC-05:00",
        "UTC+00:00",
        "UTC+01:00"
      ],
      "title": "Agentic Python Engineer",
      "url": "https://himalayas.app/companies/evaboot/jobs/agentic-python-engineer",
      "worldwide": true
    }
  ],
  "keywords": "python engineer",
  "output_detail": "summary",
  "result_count": 1,
  "scanned_count": 20,
  "scanned_pages": 1,
  "sort": "relevant",
  "timezone": "",
  "total_count": 630,
  "truncated": true,
  "updated_at": "2026-09-03T19:36:51Z"
}
```
