santifer/career-ops · error · Error
getro: ${entry.name} needs an https careers_url
Error message
getro: ${entry.name} needs an https careers_url What it means
The getro provider's fetch entry point first resolves the careers URL via resolveCareersUrl(entry), which requires an https careers_url on the entry. If that returns null (missing, non-URL, or non-https), fetch throws this error naming the entry. Getro cannot discover a collection_id without a careers page to scrape.
Source
Thrown at providers/getro.mjs:208
return parts.join(', ');
}
/** @type {Provider} */
export default {
id: 'getro',
// Getro tenants live on arbitrary vanity domains (careers.atomico.com,
// talent.cherry.vc, ...) with no common suffix to auto-detect against.
// Still reports a hit when `getro_collection` is set explicitly, so
// verify-portals has a probe URL for those entries without a live fetch.
detect(entry) {
const id = resolveCollectionOverride(entry);
return id ? { url: `${API_BASE}/${id}/search/jobs` } : null;
},
async fetch(entry, ctx) {
const careersUrl = resolveCareersUrl(entry);
if (!careersUrl) throw new Error(`getro: ${entry.name} needs an https careers_url`);
const collectionId = await resolveCollectionId(entry, ctx, careersUrl);
const apiUrl = `${API_BASE}/${collectionId}/search/jobs`;
const requestedMaxPages = Number.isInteger(entry.getro_max_pages) && entry.getro_max_pages > 0
? Math.min(entry.getro_max_pages, HARD_MAX_PAGES) : DEFAULT_MAX_PAGES;
const ctxCap = Number.isInteger(ctx?.maxPages) && ctx.maxPages > 0 ? ctx.maxPages : Infinity;
const maxPages = Math.min(requestedMaxPages, ctxCap);
const maxAgeDays = Number.isFinite(entry.getro_max_age_days) && entry.getro_max_age_days >= 0
? entry.getro_max_age_days : DEFAULT_MAX_AGE_DAYS;
const cutoffMs = maxAgeDays > 0 ? Date.now() - maxAgeDays * 86_400_000 : 0;
const out = [];
let total = Infinity;
for (let page = 0; page < maxPages && page * HITS_PER_PAGE < total; page++) {
if (page > 0) await sleep(INTER_PAGE_DELAY_MS, ctx);
View on GitHub (pinned to 1696bec4d0)
Solutions
- Add `careers_url: https://...` (an absolute https URL) to the getro entry in portals.yml.
- Upgrade any http:// careers_url to https://.
- Check YAML indentation so careers_url lands on the entry object the provider actually reads.
- Alternatively provide `getro_collection` if you only want the API path — but the careers_url requirement in fetch remains, so set both as applicable.
Example fix
// before (portals entry)
{ name: 'Acme', provider: 'getro' }
// after
{ name: 'Acme', provider: 'getro', careers_url: 'https://acme.getro.com/careers' } Defensive patterns
Strategy: validation
Validate before calling
const u = entry.careers_url && new URL(entry.careers_url);
if (!u || u.protocol !== 'https:') {
throw new Error(`getro entry "${entry.name}" requires an absolute https careers_url, got: ${entry.careers_url}`);
} Type guard
function hasHttpsCareersUrl(entry) {
if (typeof entry?.careers_url !== 'string') return false;
try { return new URL(entry.careers_url).protocol === 'https:'; } catch { return false; }
} Try / catch
try {
await getroProvider.fetch(entry, ctx);
} catch (e) {
if (e.message.includes('needs an https careers_url')) {
console.error(`Config error in entry "${entry.name}": add careers_url: https://... to portals.yml`);
return null;
}
throw e;
} Prevention
- Require careers_url in your portals.yml schema for getro entries (JSON schema / loader assert).
- Normalize http → https at config load time.
- Validate all provider entries once at startup and report every missing field together.
- Keep a sample entry in the template so the required fields stay visible.
When it happens
Trigger: Calling the getro provider's fetch for an entry that has no careers_url field, an empty string, a relative path, or an http:// (non-https) URL — i.e. any entry for which resolveCareersUrl returns null.
Common situations: portals.yml entry added with only a name; careers_url left blank after a template copy; scheme typed as http; URL accidentally nested under the wrong YAML key so the provider sees undefined.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- getonbrd: invalid URL: ${url}
- getro: ${label} — could not resolve collection_id from ${car
- glints: invalid URL: ${url}
- jobbankca: invalid URL: ${url}
- jobspresso: invalid URL: ${url}
AI-assisted analysis of santifer/career-ops@1696bec4d0 (2026-09-01).
Data as JSON: /api/errors/90c5dcd157a14eec.
Report an issue: GitHub.