XML Job Feed and API Technology in Programmatic Recruitment — Divisópolis

The XML job feed is the invisible backbone of programmatic recruitment advertising — a structured data layer that connects employer job data to partner distribution networks, governs which jobs appear where and when, and ultimately determines the speed and accuracy with which campaign changes propagate across the programmatic ecosystem. Yet it receives almost no public documentation outside of technical partner specifications. This article examines how job feeds work, why feed quality directly affects campaign performance, what the shift from feed-based to API-native integration means in practice, and how Expertini's feed architecture compares within the industry.

1. What Is a Programmatic Job Feed?

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.

2. Anatomy of a Job Feed: Fields, Requirements and Best Practices

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>
FieldStatusImpact on DistributionBest Practice
titleRequiredPrimary matching signal for search queries — highest impact fieldUse standard industry terminology; include seniority level; max 70 characters
companyRequiredInfluences CTR — recognisable brands outperform unknown companiesUse the exact brand name candidates would search for
urlRequiredTracking URL — this is the attribution chain for all clicksMust be platform-generated tracking URL, never direct job page URL
descriptionRequiredUsed for semantic matching; longer descriptions improve relevance scoringMin 300 words; use CDATA wrapper; include key responsibilities and requirements
city / state / countryRequiredGeographic targeting precision — city-level dramatically improves relevanceAll three fields; use standard ISO country codes; full state/region name
categoryRequiredCategory matching routes job to relevant publisher verticalsUse standard job category taxonomy; avoid custom internal categories
salary_min / salary_maxRecommendedSalary disclosure doubles application conversion rate on most platformsInclude both fields; use annual salary format; specify currency
experience_levelRecommendedImproves candidate relevance scoring; reduces mismatched applicationsStandardised values: Entry, Mid, Senior, Executive
education_levelRecommendedAdditional targeting signal for professional and technical rolesStandardised values matching partner network taxonomies
job_typeRecommendedFull-time/part-time/contract filtering by job seekersUse standard values: Full-time, Part-time, Contract, Temporary
posted_dateRecommendedRecency ranking on aggregator platforms — fresher dates rank higherUpdate on each feed refresh to maintain recency signal

3. Feed Refresh Cadence: Why Timing Matters More Than Most Platforms Admit

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.

4. Feed Variants by Partner Network

🌐 Own Network

Expertini Network Feed

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.

📡 Jobg8

jobg8-partner-brandname.xml

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

programmatic-feed-partner-brandname.xml

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

programmatic-feed-partner-brandname.csv

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

programmatic-feed-partner-brandname.csv

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

programmatic-feed-partner-brandname.xml

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

programmatic-feed-partner-brandname.xml

LinkedIn job aggregation feed. Provides organic listing exposure through LinkedIn's job aggregation pipeline. Full LinkedIn Recruiter integration requires direct LinkedIn relationship.

5. Tracking URL Architecture: The Attribution Chain

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.

6. API-Native vs Feed-Based Integration: A Technical Comparison

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.

DimensionFeed-Based (XML Pull)API-Native (Real-Time Push)
Update latencyUp to 15–60 min (platform refresh) + partner crawl intervalSeconds to minutes
Implementation complexityLow — generate file, expose URLHigh — maintain API clients, auth, retry logic per partner
ReliabilityHigh — static file rarely failsModerate — dependent on partner API uptime and schema stability
Partner coverageUniversal — all major networks support XML feed ingestionSelective — only networks with published partner APIs
Budget protection on campaign closeDependent on click tracker's expiry check (not the feed)Near-instant removal from partner network listings
Data richnessAll standard fields supportedCan push real-time updates, application events, and bid adjustments
Who uses itMost platforms including Expertini (+ click-level protection)Appcast, Joveo, Pandologic for key partner integrations

7. Feed Quality and Its Impact on Distribution Performance

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.

8. Expertini's Feed Architecture

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.

9. Limitations and Honest Constraints

⚠️ Feed Schema Fragmentation Across Partners

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.

⚠️ Partner Crawl Schedules Are Not Guaranteed

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 Dynamic Job Ads Attribution Gap

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

7 Feed Variants Generated Simultaneously
15-Minute Feed Refresh Cadence
Single UTM Tracking URL Per Job
Click-Level Backup vs Feed Lag
Programmatic Job Advertising — Brazil
7 network feeds generated every 15 minutes. All clicks tracked through a single validated endpoint. Full transparency on delivery.

Advance your career or build your team with Expertini's smart job platform. Connecting professionals and employers in Divisópolis, Brazil.