# Can the AI Job Search Framework Handle Job Postings from Different Countries?

> Yes the AI Job Search framework handles international job postings with its country agnostic architecture and location agnostic workflows

- Repository: [Mads Lorentzen/ai-job-search](https://github.com/MadsLorentzen/ai-job-search)
- Tags: how-to-guide
- Published: 2026-08-29

---

**Yes, the AI Job Search framework features a country-agnostic core architecture that processes job postings from any market through modular portal skills and location-agnostic evaluation workflows.**

The `MadsLorentzen/ai-job-search` repository is designed to handle job postings from different countries without hard-coding geography or language constraints. According to the source code, the framework treats location fields as generic tokens and discovers portal-specific skills dynamically, making it adaptable to any regional job market.

## Country-Agnostic Core Architecture

The framework's central workflow makes no assumptions about language or geography. In [`README.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/README.md) (lines 42-44), the documentation explains that the self-profiling, fit evaluation, and application drafting processes treat location data as generic "city/region/country" tokens. The evaluation step specifically uses a `location_verdict` field that can be populated for any country, ensuring the AI assistant can assess location fit regardless of the market.

This design means the core engine processes job metadata uniformly, whether the posting originates from Denmark, Germany, Japan, or remote-global listings.

## Built-in Global Portal CLIs

The repository ships with two country-agnostic portal CLIs that work across any market:

### LinkedIn Search Skill

Located at [`.agents/skills/linkedin-search/SKILL.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.agents/skills/linkedin-search/SKILL.md), this skill accepts a `--location` argument that accepts cities, regions, countries, or the keyword "Remote". This flexibility allows the same CLI to search LinkedIn's global database without requiring separate skills for each nation.

```bash

# Search LinkedIn for data engineering roles in Berlin

linkedin-search \
  --query "data engineer" \
  --location "Berlin" \
  --format table

```

### Freehire Search Skill

The [`.agents/skills/freehire-search/SKILL.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.agents/skills/freehire-search/SKILL.md) implementation offers granular geographic filtering through ISO-3166 alpha-2 country codes. The CLI provides `--country` and `--region` flags, enabling multi-country searches from a single command.

```bash

# Search Freehire for DevOps roles in Germany and the UK

freehire-search \
  --category devops \
  --country DE,GB \
  --remote \
  --format json

```

## Extending to New Markets

Adding support for a new country's job board requires creating a new skill folder under `.agents/skills/` that follows the repository's JSON/CLI contract. The `add-portal` command, documented in [`.claude/commands/add-portal.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/commands/add-portal.md), guides users through scaffolding a new portal skill by prompting for market name, language, and geography details.

```bash

# Add a new portal for TechJobs.jp (Japan market)

/add-portal

# Prompts for market name, language, and example URL

# Generates .agents/skills/techjobs-jp/ with SKILL.md, CLI scaffold, and tests

# Edit SKILL.md to set enabled: true

```

Once created and enabled, the skill integrates automatically into the scraping workflow without modifying the core framework code.

## Market-Specific Examples

The repository includes four Danish portal examples—Jobindex, Jobnet, Jobbank, and Jobdanmark—located in `.agents/skills/`. As noted in [`SETUP.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/SETUP.md) (lines 29-31), these are **disabled by default** (`enabled: false`), ensuring they do not interfere with searches for other markets. Users targeting the Danish market can enable these skills via the front-matter flag without affecting the global functionality.

This pattern demonstrates how the framework accommodates local portals while maintaining a clean separation between market-specific data sources and the core processing engine.

## Running the Scraping Workflow

The `/scrape` command automatically discovers and executes all enabled portal skills. According to [`.claude/skills/job-scraper/search-queries.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/.claude/skills/job-scraper/search-queries.md), the scraper walks the directory `.agents/skills/*/SKILL.md` and runs each skill's CLI if the front-matter flag `enabled: true` is set.

```bash

# Run the full scrape workflow – auto-discovers all enabled skills

/scrape

# Returns uniform schema: {title, company, location, date, url, ...}

```

This mechanism works for any portal following the skill pattern, regardless of the country it targets, producing a standardized output schema that the country-agnostic core can process.

## Summary

- The AI Job Search framework uses a **country-agnostic core** that processes location data as generic tokens via the `location_verdict` field.
- **LinkedIn-search** and **freehire-search** provide out-of-the-box global coverage using flexible location and ISO country code parameters.
- New markets are supported by creating portal skills in `.agents/skills/` using the guided `add-portal` command.
- Market-specific portals (like the Danish examples) remain **disabled by default** to avoid cluttering searches for other regions.
- The `/scrape` command automatically includes any skill with `enabled: true`, making extension to new countries seamless.

## Frequently Asked Questions

### What countries are supported out of the box?

The framework supports global searches immediately through the **LinkedIn-search** and **freehire-search** skills. LinkedIn-search accepts any city, region, or country name via the `--location` flag, while freehire-search accepts ISO-3166 alpha-2 country codes via the `--country` flag, covering all markets these platforms index.

### How do I add a job portal from a specific country?

Use the `/add-portal` command to scaffold a new skill in `.agents/skills/`. The command prompts for market details and generates the necessary [`SKILL.md`](https://github.com/MadsLorentzen/ai-job-search/blob/main/SKILL.md), CLI scaffold, and test files. After implementing the portal-specific scraping logic, set `enabled: true` in the front matter to include it in `/scrape` runs.

### Does the framework support non-English job postings?

Yes. Because the core architecture treats text fields as generic tokens and does not hard-code language assumptions, the framework can process job postings in any language. The LLM-based evaluation and drafting steps handle multilingual content naturally, provided the portal skill extracts the text correctly.

### Can I search for remote jobs across multiple countries?

Yes. The LinkedIn-search skill accepts "Remote" as a location value, while freehire-search provides a `--remote` boolean flag that can be combined with multiple country codes (e.g., `--country DE,GB,NL --remote`). This allows simultaneous searching for remote positions across several countries using a single command.