
A programmatic job feed is a machine-readable file — almost universally formatted as XML in the recruitment industry — that contains structured data describing one or more job listings. It is generated by the programmatic advertising platform and made available at a public URL where partner distribution networks (job boards, aggregators, search engines) can retrieve and ingest it on a scheduled basis.
The feed is the primary mechanism by which partner networks learn: which jobs exist in an employer's campaign; what their attributes are (title, location, description, salary, category); where to send job seekers who click the listing (the tracking URL); and which jobs are active versus paused or cancelled. Without a feed, a partner network has no way to know what to display or where to route clicks.
In the broader context of programmatic advertising technology, the job feed occupies the same conceptual role as the creative assets and targeting parameters in display advertising — it is the content layer that the distribution infrastructure serves. The distinction from display advertising is that job listings are structured, text-based data objects with well-defined attributes, making them far more tractable for automated matching against job seeker queries than arbitrary creative images.
A minimal valid job feed entry typically contains:
<!-- Simplified example of a programmatic job feed entry --> <job> <title>Senior Software Engineer — Python Backend</title> <company>Acme Technology Ltd</company> <url>https://us.expertini.com/track/click/a1b2c3d4e5f6/senior-software-engineer-12345/</url> <description><![CDATA[Full job description text here...]]></description> <city>Austin</city> <state>Texas</state> <country>US</country> <category>Technology</category> <salary_min>95000</salary_min> <salary_max>130000</salary_max> <salary_currency>USD</salary_currency> <job_type>Full-time</job_type> <experience_level>Senior</experience_level> <education_level>Bachelor's Degree</education_level> <posted_date>2025-03-01</posted_date> <referencenumber>SSE-2025-001</referencenumber> </job>
| Field | Status | Impact on Distribution | Best Practice |
|---|---|---|---|
title | Required | Primary matching signal for search queries — highest impact field | Use standard industry terminology; include seniority level; max 70 characters |
company | Required | Influences CTR — recognisable brands outperform unknown companies | Use the exact brand name candidates would search for |
url | Required | Tracking URL — this is the attribution chain for all clicks | Must be platform-generated tracking URL, never direct job page URL |
description | Required | Used for semantic matching; longer descriptions improve relevance scoring | Min 300 words; use CDATA wrapper; include key responsibilities and requirements |
city / state / country | Required | Geographic targeting precision — city-level dramatically improves relevance | All three fields; use standard ISO country codes; full state/region name |
category | Required | Category matching routes job to relevant publisher verticals | Use standard job category taxonomy; avoid custom internal categories |
salary_min / salary_max | Recommended | Salary disclosure doubles application conversion rate on most platforms | Include both fields; use annual salary format; specify currency |
experience_level | Recommended | Improves candidate relevance scoring; reduces mismatched applications | Standardised values: Entry, Mid, Senior, Executive |
education_level | Recommended | Additional targeting signal for professional and technical roles | Standardised values matching partner network taxonomies |
job_type | Recommended | Full-time/part-time/contract filtering by job seekers | Use standard values: Full-time, Part-time, Contract, Temporary |
posted_date | Recommended | Recency ranking on aggregator platforms — fresher dates rank higher | Update on each feed refresh to maintain recency signal |
The feed refresh cadence — how frequently the programmatic platform regenerates and re-publishes the job feed — is one of the most commercially significant technical parameters in programmatic job advertising, and one of the least discussed in platform marketing materials. Understanding its implications requires examining what happens at each stage of the refresh cycle.
The propagation chain: When an employer makes a change to a campaign — pausing a job, adding a new posting, cancelling due to a filled role — that change must travel through a chain: (1) the platform updates its internal data store; (2) the platform regenerates the XML feed file; (3) the partner network's crawler retrieves the updated feed; (4) the partner network's ingestion process parses the feed and updates its job index; (5) the updated index propagates to the partner network's search results and sponsored listings. Each step in this chain introduces latency.
Why it matters for budget protection: If a role is filled on Monday at 9am but the feed does not update until 11am (2-hour refresh cycle), and a partner network crawls and ingests the feed at 1pm, the sponsored listing continues to receive clicks for 4 hours after the role was filled. In a CPC model, every one of those clicks is either charged to the employer (if the click tracker does not check order status) or intercepted as an expired/inactive order click (if the tracker performs this check). A platform with a 2-hour refresh cycle and no click-level expiry check could charge an employer for hours of clicks on a cancelled role.
Industry norms vs Expertini's approach: Most programmatic platforms refresh feeds every 30–60 minutes. Appcast's standard feed ingestion cycle is typically 30–60 minutes; Indeed's job feed crawler operates on a similar cadence. Expertini's programmatic feed generator is triggered via automated API call every 15 minutes — generating seven distinct feeds (one per partner network) simultaneously. However, the click tracker's Layer 3 and L7b checks provide an independent safety net: even if a partner network has not yet ingested the updated feed, clicks on expired or cancelled campaigns are intercepted at the tracking URL level and never charged.
Internal feed activates sponsored flag on job documents in Elasticsearch. Jobs gain priority placement across 251 subdomains. No external HTTP request — internal index update on payment confirmation.
Standard Jobg8 XML schema. Includes all job metadata, UTM tracking URLs, and bid parameters. Published to static path, retrieved by Jobg8's crawler on its ingestion schedule.
Appcast-compatible XML with category taxonomy mapping. Appcast's publisher network ingests and distributes to 10,000+ publisher sites. Feed includes Expertini's UTM tracking URLs.
Google-formatted feed for Dynamic Job Ads. Combined with JSON-LD JobPosting schema on job pages for Google for Jobs organic indexing. Google's crawler operates independently of feed refresh timing.
Microsoft Advertising-compatible feed for Dynamic Search Ads across Bing, Yahoo, AOL and MSN. Supports LinkedIn profile targeting parameters via Microsoft's unique integration.
Indeed-compatible sponsored jobs feed schema. Populates sponsored listings on Indeed's platform. Note: feed-based integration provides less attribution depth than Indeed's direct employer API.
LinkedIn job aggregation feed. Provides organic listing exposure through LinkedIn's job aggregation pipeline. Full LinkedIn Recruiter integration requires direct LinkedIn relationship.
Every job entry in every partner network feed contains a tracking URL rather than a direct link to the job page. This is the architectural decision that gives Expertini control over click attribution, fraud detection, and budget enforcement across all distribution channels simultaneously.
The tracking URL follows the pattern: https://[country].expertini.com/track/click/[utm_key]/[job_slug]/. The utm_key is a 12-character cryptographically random hexadecimal string, unique to each order. The job_slug identifies the specific job within the campaign. This two-part key structure ensures that: (1) the UTM key uniquely identifies the campaign and employer; (2) the job slug identifies which specific job was clicked; and (3) the combination of both, passed through the 7-layer validator, is necessary for a click to be counted.
When all seven partner networks embed this tracking URL in their listings, Expertini becomes the single counter of record for all clicks — regardless of which network delivered them. This eliminates the principal-agent problem inherent in asking partner networks to self-report their click counts: the network has no ability to inflate Expertini's click counter because they do not control the tracking endpoint.
Feed-based integration and API-native integration represent two different technical approaches to the same goal: getting job data from the employer's system to the partner distribution network. Understanding the practical differences is important for employers evaluating platform capabilities.
Feed-based integration (XML pull): The programmatic platform generates a static file at a URL. The partner network periodically crawls this URL and ingests the file. Updates propagate on the partner's ingestion schedule, not the platform's publish schedule. No real-time push exists — the partner decides when to check for updates. This model is simpler to implement, works with any partner network that supports feed ingestion, and does not require the partner to grant API access. Its limitation is propagation latency.
API-native integration (real-time push): The programmatic platform sends update events directly to the partner network's API in real time — immediately when a campaign is activated, paused, or cancelled. The partner network updates its index within seconds rather than waiting for its next crawl cycle. This requires both parties to maintain API credentials, handle authentication, manage rate limits, and handle failure and retry logic. When it works, it is dramatically faster and more reliable for time-sensitive campaign changes. When it breaks (due to API outages, credential expiry, schema changes), updates fail silently unless robust error monitoring exists.
| Dimension | Feed-Based (XML Pull) | API-Native (Real-Time Push) |
|---|---|---|
| Update latency | Up to 15–60 min (platform refresh) + partner crawl interval | Seconds to minutes |
| Implementation complexity | Low — generate file, expose URL | High — maintain API clients, auth, retry logic per partner |
| Reliability | High — static file rarely fails | Moderate — dependent on partner API uptime and schema stability |
| Partner coverage | Universal — all major networks support XML feed ingestion | Selective — only networks with published partner APIs |
| Budget protection on campaign close | Dependent on click tracker's expiry check (not the feed) | Near-instant removal from partner network listings |
| Data richness | All standard fields supported | Can push real-time updates, application events, and bid adjustments |
| Who uses it | Most platforms including Expertini (+ click-level protection) | Appcast, Joveo, Pandologic for key partner integrations |
Feed quality — the completeness, accuracy, and freshness of the data in a job feed — directly influences how partner networks rank, distribute, and match jobs to candidate queries. Poorly populated feeds produce lower distribution quality even when the underlying advertising budget is adequate.
Description length and richness: Partner networks that use semantic or keyword matching to route jobs to relevant candidates require substantial text in the job description field. A 50-word description provides few matching signals; a 400-word description with specific skill requirements, responsibilities, and context provides a rich signal set that improves placement relevance. Indeed's research found that job postings with more than 300 words in the description received 30% more applications than those under 100 words.
Salary field population: As discussed in the ROI benchmarks article, salary range disclosure produces a 2× application rate improvement. In the feed context, it also affects how platforms rank sponsored listings — Google for Jobs, Indeed, and LinkedIn all surface salary-populated postings more prominently in their search results.
Category accuracy: Incorrect category assignment routes jobs to irrelevant publisher verticals. A software engineering role incorrectly categorised as "Administration" will be distributed to administrative job boards and their audiences, producing low click-to-apply rates and wasted budget. Standard category taxonomies (O*NET in the US, ISCO internationally) provide reliable mappings from job titles to categories.
Geographic field completeness: Feeds that populate only the country field and leave city and state empty lose the benefit of local intent targeting. A job seeker in Austin searching for "Software Engineer Austin" will be matched to postings that include "Austin" in their geographic fields — postings with only "United States" will rank lower or not appear in location-specific queries.
Expertini's programmatic feed system generates seven distinct XML feed files simultaneously — one per partner network — every 15 minutes via automated API call. The feed generator queries the active campaigns in the country's Elasticsearch index using a match_all query, then applies Python-side status filtering (to handle case-insensitive status values and mixed-case document conventions without relying on Elasticsearch keyword mapping precision). Only orders with status active (case-insensitive) contribute jobs to the feed.
Each feed file is published to a static path accessible to partner network crawlers. The 15-minute refresh cycle is significantly faster than the 30–60 minute industry norm. Combined with the click tracker's Layer 3 and L7b checks — which catch clicks on expired or inactive orders regardless of feed propagation state — this architecture provides two independent lines of protection against budget consumption on concluded campaigns: feed-level removal (within 15 minutes) and click-level validation (instantaneous).
Job descriptions in the feed are wrapped in CDATA sections — a standard XML technique that prevents special characters in job description text from corrupting the XML structure. Expertini's feed generator uses a sentinel-string approach to inject CDATA markers after XML serialisation, ensuring that the serialiser's XML entity encoding does not escape the CDATA delimiters themselves. This technical detail is operationally important: malformed CDATA wrapping is a common source of feed validation failures that causes partner networks to reject entire feed files.
One acknowledged limitation of the current implementation is that it is feed-based rather than API-native for external partner networks. The 15-minute refresh cycle and click-level tracking URL validation substantially mitigate the practical impact of feed-vs-API differences for most hiring scenarios. For time-critical campaigns — particularly roles that may be filled within hours of launch in competitive markets — the residual 15-minute propagation window remains a theoretical exposure that API-native integrations would eliminate.
Each partner network maintains its own XML schema with its own field names, required fields, and value taxonomies. A field called <experience_level> in one partner's schema may be <seniority> in another's, with different valid values in each. Maintaining seven schema-compliant feeds simultaneously requires ongoing maintenance as partner schema requirements evolve. Schema changes by partner networks can break feed ingestion without warning, resulting in jobs silently disappearing from that partner's distribution until the feed is updated to match the new requirements.
While Expertini refreshes feeds every 15 minutes, this does not guarantee that partner networks will ingest the updated feed on the same cadence. Most partner networks operate their own crawl schedules — typically every 30 minutes to several hours — and these schedules are not always publicly disclosed. An employer monitoring their Expertini dashboard may observe that a cancelled campaign has been removed from Expertini's own search results immediately, but the job may persist on a Jobg8 publisher site for 30–60 minutes until that network's next crawl cycle processes the updated feed.
Google's Dynamic Job Ads integration does not support standard third-party CPC billing through external tracking URLs in all configurations. Some Google click flows bypass the tracking URL and navigate directly to the job page, particularly in certain Google for Jobs organic placements. This means that a fraction of Google-sourced traffic may reach the job page without passing through Expertini's click tracker — and therefore without being counted, validated, or charged. Employers should be aware that Google-attributed traffic in their Expertini dashboard may undercount total Google-sourced visits for this reason.
FAQ — Job Feed & API Technology · Brazil
How quickly do campaign changes take effect across partner networks?
Changes to Expertini's own platform (pausing, cancelling, activating) take effect immediately in Expertini's own search results because the platform updates its internal Elasticsearch index directly without waiting for feed regeneration. For external partner networks, changes propagate within the next feed refresh cycle (up to 15 minutes) plus the time for each partner network to crawl and ingest the updated feed (which varies by partner but is typically 15–60 additional minutes). For the most time-sensitive changes — particularly role cancellation when a position is filled — the click tracker's L3 and L7b validation layers ensure no clicks are charged on the cancelled campaign even during this propagation window.
Does feed quality affect how prominently my jobs appear in partner network results?
Yes, significantly. Partner networks use the data in job feed entries to match jobs to job seeker queries, and the quality of that matching depends directly on the richness of the feed data. Jobs with complete descriptions (300+ words), stated salary ranges, accurate geographic fields at city/state/country level, correct job categories, and standard industry job titles consistently outperform those with minimal or generic data — regardless of the CPC bid level. From a programmatic ROI perspective, feed data quality is a controllable variable that affects performance as directly as bid level, and it costs nothing to improve.
What is the difference between a programmatic feed and Google for Jobs?
They are technically related but serve different purposes. Google for Jobs is an organic job search feature that indexes JobPosting structured data (JSON-LD schema) from employer websites and job platforms — it is not a paid advertising product. Expertini's programmatic feed for Google is a Dynamic Job Ads feed used for paid campaign distribution through Google's advertising network. Both mechanisms cause jobs to appear in Google's ecosystem, but through different pathways: organic JobPosting schema indexing (free, based on crawling) versus programmatic feed-based paid placement (CPC-billed, based on feed ingestion). Expertini's job pages include both — JobPosting JSON-LD for organic indexing and programmatic feed entries with tracking URLs for paid distribution.