Skip to content

exvas/Indeed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ERPNext Indeed Integration

Status: Production Ready ERPNext HRMS Required License: MIT

πŸŽ‰ Latest Update (September 2025): All major features implemented and tested! πŸŽ‰


A production-ready, enterprise-grade integration system that connects ERPNext with Indeed for automated job posting and application management. This app enables seamless synchronization of job openings from ERPNext to Indeed and automatically processes incoming job applications with advanced analytics and monitoring.

⚑ Quick Status

Feature Status Description
🎯 Core Integration βœ… Working XML feed, webhooks, job sync
πŸ“Š Analytics Dashboard βœ… Working Real-time metrics and performance
πŸ“± Application Processing βœ… Working Automatic Job Applicant creation
πŸ”§ Bulk Operations βœ… Working Mass job management tools
πŸ§ͺ A/B Testing βœ… Working Job optimization campaigns
πŸ›‘οΈ Security βœ… Working HMAC validation, data protection
πŸ“¦ Auto-Installation βœ… Working Automatic HRMS dependency handling

Current Installation Base: Successfully deployed and tested
Last Updated: September 28, 2025
Maintenance Status: Actively maintained

πŸš€ Features

Core Integration βœ… Production Ready

  • 🎯 Automated Job Posting: Jobs created in ERPNext automatically appear on Indeed
  • πŸ“¨ Application Sync: Job applications from Indeed automatically create Job Applicant records
  • πŸ”„ Multiple Integration Methods: XML Feed, Partner API, and Third-party aggregators
  • ⚑ Real-time Updates: Jobs sync immediately when posted or updated
  • πŸ” Secure Processing: HMAC webhook validation and encrypted data handling

Advanced Analytics βœ… Fully Functional

  • πŸ“Š Indeed Dashboard: Real-time performance metrics and success tracking
  • πŸ“ˆ Application Analytics: Deep insights into candidate sources and conversion rates
  • πŸ“‹ Bulk Job Manager: Mass operations for enterprise-scale job management
  • πŸ§ͺ A/B Test Campaigns: Scientific job posting optimization and testing
  • 🎯 Performance Monitoring: Complete audit trails and error tracking

Enterprise Features βœ… Battle Tested

  • πŸ—οΈ Custom Fields: Enhanced Job Opening form with Indeed-specific options
  • πŸ›‘οΈ Webhook Security: Military-grade security with signature validation
  • πŸ“± Mobile Responsive: Works perfectly on all devices and screen sizes
  • βš™οΈ Automatic Setup: One-command installation with dependency management
  • πŸ“Š GDPR Compliant: Privacy controls and data protection built-in

πŸ—οΈ System Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        ERPNext System                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ Job Opening β”‚  β”‚Job Applicantβ”‚  β”‚ Indeed Integration  β”‚  β”‚
β”‚  β”‚   DocType   β”‚  β”‚   DocType   β”‚  β”‚     Settings        β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚              Indeed Integration Module               β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  β”‚
β”‚  β”‚  β”‚   utils.py  β”‚  β”‚   api.py    β”‚  β”‚   hooks.py  β”‚  β”‚  β”‚
β”‚  β”‚  β”‚ (Core Logic)β”‚  β”‚(API Endpoints)β”‚ β”‚ (Triggers)  β”‚  β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                              β”‚
                              β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                      Indeed Platform                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  πŸ” Job Search Results      πŸ‘₯ Candidate Applications       β”‚
β”‚  πŸ“ Job Listings           πŸ“„ Resume Database               β”‚
β”‚  🎯 Targeted Ads           πŸ“Š Analytics & Reporting         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“¦ Installation

Prerequisites

  • ERPNext v15.x or higher (Core platform)
  • HRMS v1.x or higher (Required for Job Opening and Job Applicant DocTypes)
  • Python 3.8+
  • MariaDB/MySQL database
  • Internet connectivity for Indeed API access

Automatic Installation (Recommended)

The Indeed app will automatically install HRMS if it's not already installed.

# Navigate to your Frappe bench
cd /path/to/your/frappe-bench

# Get the app (automatically downloads HRMS if needed)
bench get-app https://github.com/exvas/Indeed.git

# Install on your site (automatically installs HRMS first)
bench --site your-site.local install-app indeed

# Migrate and restart
bench --site your-site.local migrate
bench restart

Manual Installation (If HRMS not installed)

If you need to install HRMS manually first:

# Install HRMS first
bench get-app hrms
bench --site your-site.local install-app hrms

# Then install Indeed
bench get-app https://github.com/exvas/Indeed.git
bench --site your-site.local install-app indeed

# Migrate and restart
bench --site your-site.local migrate
bench restart

Install from Local Development

# If developing locally
cd /path/to/your/frappe-bench
bench get-app indeed /path/to/indeed/app
bench --site your-site.local install-app indeed

Verification

After installation, verify that both apps are installed:

# Check installed apps
bench --site your-site.local list-apps

# You should see:
# frappe
# erpnext  
# hrms     βœ…
# indeed   βœ…

βš™οΈ Configuration

1. Basic Setup

Navigate to Indeed Integration Settings and configure:

Company Information

  • Default Company: Select your company from ERPNext
  • Company Website URL: Your company's website
  • HR Contact Email: Email for application notifications

Integration Method

Choose your preferred integration method:

  • XML_FEED: Indeed crawls an XML file (recommended for most users)
  • API: Direct Indeed Partner API integration (requires Indeed partnership)
  • THIRD_PARTY: Integration through job board aggregators

Security Settings

  • Webhook Secret: Set a strong password for webhook validation
  • Enable Auto Posting: Toggle automatic job posting to Indeed

2. Advanced Configuration

XML Feed Settings

  • Feed URL: https://yourdomain.com/files/indeed_jobs.xml
  • Updates automatically when jobs are posted/modified
  • Cached for performance optimization

Webhook Configuration

  • Webhook URL: https://yourdomain.com/api/method/indeed.indeed.api.webhook_job_application
  • Validates incoming application data from Indeed
  • Creates Job Applicant records automatically

🎯 Usage Guide

For HR Teams: Posting Jobs

Step 1: Create Job Opening

  1. Go to HR > Job Opening
  2. Fill in all job details (title, description, location, salary, etc.)
  3. Important: Check the "Post to Indeed" checkbox
  4. Set job status to "Open"
  5. Save the job opening

Step 2: Monitor Integration Status

  1. Navigate to Indeed > Indeed Job Integration
  2. Find your job in the list
  3. Check status:
    • Posted: Successfully published to Indeed
    • Failed: Needs attention (check error logs)
    • Pending: Processing in queue

Step 3: Advanced Management

  • Bulk Operations: Use Indeed > Bulk Job Manager for mass operations
  • Analytics: View performance in Indeed > Indeed Dashboard
  • A/B Testing: Create test campaigns in Indeed > AB Test Campaign

Receiving Applications

Applications from Indeed automatically:

  1. Create Job Applicant records in ERPNext
  2. Download candidate resumes (if available)
  3. Process screening question responses
  4. Send email notifications to HR team
  5. Link to original job opening

To view applications:

  • Go to HR > Job Applicant
  • Filter by Source = "Indeed"
  • Review and process applications normally

πŸ”§ Integration Methods Explained

XML Feed Method (Recommended)

graph TD
    A[Job Opening Created] --> B[Generate XML Feed]
    B --> C[Indeed Crawls Feed]
    C --> D[Job Appears on Indeed]
    D --> E[Applications via Webhook]
    E --> F[Job Applicant Created]
Loading

Pros:

  • Simple to set up
  • No API rate limits
  • Works with standard Indeed accounts
  • Reliable and stable

Cons:

  • Not real-time (depends on Indeed crawl frequency)
  • Limited customization options

Partner API Method

graph TD
    A[Job Opening Created] --> B[GraphQL API Call]
    B --> C[Real-time Posting]
    C --> D[Immediate Indeed Listing]
    D --> E[Enhanced Analytics]
Loading

Pros:

  • Real-time posting
  • Enhanced analytics and reporting
  • Better job targeting options
  • Premium placement features

Cons:

  • Requires Indeed partnership
  • API rate limits apply
  • More complex setup

Third-Party Method

graph TD
    A[Job Opening Created] --> B[Aggregator API]
    B --> C[Multi-Board Posting]
    C --> D[Indeed + Other Boards]
    D --> E[Centralized Analytics]
Loading

Pros:

  • Posts to multiple job boards
  • Single integration point
  • Often includes additional services
  • Comprehensive reporting

Cons:

  • Additional costs
  • Dependency on third-party service
  • Potential data format limitations

πŸ“Š Advanced Features

Indeed Dashboard

Comprehensive analytics including:

  • Posting Performance: Success rates, error tracking
  • Application Metrics: Application volume, conversion rates
  • Job Analytics: Most popular jobs, location performance
  • Time-based Reports: Trends over time, peak application periods

Bulk Job Manager

Mass operations for:

  • Bulk Posting: Post multiple jobs simultaneously
  • Status Updates: Change multiple job statuses
  • Bulk Editing: Update job details across multiple postings
  • Export/Import: CSV operations for large job sets

Application Analytics

Detailed insights into:

  • Source Attribution: Track application sources
  • Candidate Quality: Scoring and filtering
  • Response Times: Application processing metrics
  • Geographic Distribution: Candidate location analysis

A/B Test Campaigns

Optimize job performance by testing:

  • Job Titles: Different title variations
  • Descriptions: Content optimization
  • Requirements: Qualification variations
  • Benefits: Compensation and perk emphasis

πŸ”’ Security & Compliance

Data Protection

  • Webhook Validation: HMAC signature verification
  • HTTPS Enforcement: Secure data transmission
  • Data Encryption: Sensitive information protection
  • Access Control: Role-based permissions

Compliance Features

  • GDPR Compliance: Candidate data protection
  • Data Retention: Configurable retention policies
  • Audit Trails: Complete activity logging
  • Privacy Controls: Candidate data anonymization

🚨 Troubleshooting

Common Issues

Jobs Not Appearing on Indeed

Symptoms: Job created but not visible on Indeed Solutions:

  1. Check "Post to Indeed" checkbox is enabled
  2. Verify job status is "Open"
  3. Check Indeed Job Integration record for errors
  4. Validate XML feed at /files/indeed_jobs.xml
  5. Ensure all required fields are completed

Applications Not Creating Job Applicants

Symptoms: Indeed applications not appearing in ERPNext Solutions:

  1. Verify webhook URL configuration with Indeed
  2. Check webhook secret matches Indeed settings
  3. Review Error Log for webhook processing failures
  4. Test webhook endpoint manually
  5. Ensure Job Opening exists and is active

HRMS Dependency Issues

Symptoms: Installation fails with "DocType Job Opening not found" or similar Solutions:

  1. Ensure HRMS is installed: bench --site site.local list-apps
  2. Install HRMS manually: bench get-app hrms && bench --site site.local install-app hrms
  3. Reinstall Indeed after HRMS: bench --site site.local install-app indeed
  4. Check app order in sites/apps.txt (hrms should come before indeed)
  5. Migrate after installation: bench --site site.local migrate

XML Feed Issues

Symptoms: Feed not updating or showing errors Solutions:

  1. Check file permissions on sites/assets/files/
  2. Verify background job processing
  3. Manual regeneration: bench execute indeed.indeed.utils.generate_xml_feed
  4. Check site URL configuration
  5. Validate XML format and encoding

Performance Issues

Symptoms: Slow job posting or application processing Solutions:

  1. Enable Redis caching
  2. Optimize database indexes
  3. Configure CDN for XML feed
  4. Monitor server resources
  5. Review background job queue

Debug Tools

System Status Check

# Check integration settings
bench --site your-site.local execute "import frappe; print(frappe.get_single('Indeed Integration Settings').as_dict())"

# Validate XML feed
curl https://your-site.com/files/indeed_jobs.xml

# Test webhook endpoint
bench --site your-site.local execute "from indeed.indeed.api import webhook_job_application; print('Webhook function loaded')"

Error Monitoring

  • Error Log: System > Error Log (filter by "Indeed")
  • Background Jobs: System > RQ Job (monitor processing)
  • Integration Records: Indeed > Indeed Job Integration
  • Application Logs: Check webhook processing logs

πŸ”„ API Reference

Webhook Endpoints

Job Application Webhook

  • URL: /api/method/indeed.indeed.api.webhook_job_application
  • Method: POST
  • Authentication: HMAC signature validation
  • Content-Type: application/json

Request Format:

{
  "job": {
    "id": "indeed_job_id",
    "title": "Software Engineer",
    "company": "Company Name"
  },
  "candidate": {
    "email": "candidate@example.com",
    "name": "John Doe",
    "phone": "+1234567890",
    "resume_url": "https://indeed.com/resume/123"
  },
  "application": {
    "date": "2025-09-28T10:30:00Z",
    "cover_letter": "Application cover letter text",
    "screening_answers": []
  }
}

Manual API Endpoints

Generate XML Feed

  • URL: /api/method/indeed.indeed.api.generate_xml_feed_manual
  • Method: GET
  • Authentication: User session required

Test Integration

  • URL: /api/method/indeed.indeed.api.test_indeed_integration
  • Method: POST
  • Authentication: User session required

πŸ“‹ Production Checklist

Security

  • Set strong webhook_secret in Indeed Integration Settings
  • Enable HTTPS for production domain
  • Configure rate limiting for webhook endpoints
  • Set up firewall rules for API endpoints
  • Enable two-factor authentication for admin users

Performance

  • Enable Redis caching for XML feed
  • Set up CDN for job XML feed delivery
  • Monitor database performance for high job volumes
  • Configure backup strategy for job data
  • Optimize database indexes for job queries

Monitoring

  • Set up error alerting for failed integrations
  • Monitor webhook response times
  • Track job posting success rates
  • Set up log rotation for Indeed integration logs
  • Configure uptime monitoring for webhook endpoints

Compliance

  • Ensure GDPR compliance for applicant data
  • Set data retention policies
  • Configure audit trails for job postings
  • Review Indeed's terms of service compliance
  • Set up data anonymization procedures

🎯 What Makes This Special

Enterprise-Grade Features

  • πŸš€ Automatic Dependency Management: Installs HRMS automatically if not present
  • ⚑ Real-time Integration: Jobs sync immediately when posted
  • πŸ›‘οΈ Secure Webhook Processing: HMAC signature validation for applications
  • πŸ“Š Advanced Analytics: Comprehensive dashboards and performance metrics
  • πŸ”§ Bulk Operations: Mass job management and A/B testing capabilities
  • πŸ” Error Monitoring: Complete audit trails and error tracking

Production Ready

  • βœ… Thoroughly Tested: All major features validated and working
  • βœ… SQL Error Free: All database queries optimized and error-free
  • βœ… Performance Optimized: Efficient XML generation and caching
  • βœ… GDPR Compliant: Data protection and privacy controls built-in
  • βœ… Scalable Architecture: Handles high-volume job posting and applications

🀝 Support & Contributing

Getting Help

  • πŸ“– Documentation: This comprehensive README covers all features
  • πŸ” Error Logs: System > Error Log for detailed error information
  • πŸ’¬ Community: ERPNext Community Forum for general questions
  • πŸ› GitHub Issues: Report bugs and request features

Contributing

We welcome contributions! Here's how to get started:

  1. Fork the repository

    git clone https://github.com/exvas/Indeed.git
    cd Indeed
  2. Create a feature branch

    git checkout -b feature/your-amazing-feature
  3. Make your changes

    • Follow existing code patterns
    • Add tests for new functionality
    • Update documentation as needed
  4. Test your changes

    # Install in development mode
    bench get-app . --branch your-branch
    bench --site development.local install-app indeed
    bench --site development.local set-config developer_mode 1
  5. Submit your contribution

    git commit -m 'Add amazing feature: detailed description'
    git push origin feature/your-amazing-feature

    Then open a Pull Request with a clear description.

Development Guidelines

  • Code Quality: Follow PEP 8 for Python code
  • Documentation: Update README.md for user-facing changes
  • Testing: Test all new features thoroughly
  • Security: Validate all inputs and use secure practices

πŸ“ˆ Roadmap

Upcoming Features

  • πŸ”— Multi-Board Integration: Support for LinkedIn, Glassdoor, etc.
  • πŸ€– AI Job Optimization: Smart job description optimization
  • πŸ“± Mobile App: Mobile management interface
  • πŸ”„ Advanced Sync: Bi-directional job status synchronization
  • πŸ“Š Enhanced Analytics: Predictive analytics and insights

Version History

  • v1.0.0: Core integration with XML feed and webhook support
  • v1.1.0: Advanced analytics and bulk operations
  • v1.2.0: A/B testing and performance optimization
  • v1.3.0: Automatic dependency management and enhanced security

πŸ“ License

MIT License - Feel free to use, modify, and distribute.

πŸ“ž Contact & Support

Developer

Project Links


πŸ™ Acknowledgments

Special thanks to:

  • ERPNext Community for the amazing framework
  • Frappe Technologies for ERPNext and HRMS
  • Indeed for their integration-friendly platform
  • Contributors who help improve this integration

πŸŽ‰ Made with ❀️ for the ERPNext Community πŸŽ‰

Ready to supercharge your recruitment process?
⭐ Star this repo β€’ πŸ› Report Issues β€’ πŸ’‘ Request Features

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors