Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message
Laravel Resume Parser

Laravel Resume Parser Laravel Package

sharpapi/laravel-resume-parser

A Laravel package for parsing resumes and CVs into structured candidate data using SharpAPI. Upload PDF or Word documents and extract contact details, work history, education, skills, and other key fields to streamline recruitment and applicant-tracking workflows.

View on GitHub
Deep Wiki
Context7

Resume Parser/CV Parser for Laravel with AI-powered SharpAPI

Frequently asked questions about Laravel Resume Parser
What does sharpapi/laravel-resume-parser do?
sharpapi/laravel-resume-parser is a Laravel package that sends PDF or Word resumes to SharpAPI and returns structured candidate data. It extracts contact details, work history, education, skills, and other key fields for recruitment and applicant-tracking workflows. It uses an asynchronous job pattern with fetchResults rather than returning parsed data synchronously.
How do I install sharpapi/laravel-resume-parser in a Laravel app?
Install it with Composer, publish the package config, and set your SharpAPI API key in the environment. The package follows the standard Laravel config/*.php and .env idiom, so queue workers should already be running for async jobs. Pin ^1.1.0 and confirm the sharpapi/php-core ^1.4.1 constraint resolves in composer.json.
Which Laravel versions does this resume parser support?
The package is Laravel-native and the assessment targets Laravel 10/11 applications, but you should check composer.json for the exact Laravel and PHP constraints. The only meaningful coupling called out is sharpapi/php-core ^1.4.1, so run composer why-not sharpapi/php-core 1.4.1 before adopting. It is a poor fit for non-Laravel PHP services.
How does the async job and fetchResults polling work?
Upload or submit a resume, let the package create an async SharpAPI job, then call fetchResults to poll for the parsed candidate data. The polling interval is configurable, and v1.1.0 fixes a bug where that setting was silently ignored. Because it relies on a long-lived polling loop, it is less suitable for serverless or edge runtimes.
Does it parse both PDF and Word CVs?
Yes. The package is built for resume and CV ingestion from PDF or Word documents, returning structured fields rather than raw text. That makes it suitable for recruitment and applicant-tracking workflows where candidates upload common document formats.
Can I use it without a SharpAPI account or fully self-hosted?
No. It is a thin Laravel wrapper around SharpAPI and requires a SharpAPI API key and access to the external service. In sharpapi/php-core ^1.4.1 a missing API key throws InvalidArgumentException, which is better surfaced at boot than mid-job. If you need fully self-hosted or synchronous parsing, this package is not the right fit.
How can I test resume parsing in CI without calling SharpAPI?
The package's Testbench suite is a useful signal because it lets the package be exercised in CI without a live SharpAPI account. For your own application tests, mock or fake the SharpAPI client or the job boundary rather than making real network calls. Then add separate staging checks for a happy-path parse and the failure paths.
What changed in v1.1.0 and is it a breaking release?
v1.1.0 is overwhelmingly corrective and tooling-oriented: it fixes the ignored polling interval, bumps sharpapi/php-core to ^1.4.1, adds Boost/AI-assist resources, and adds a test suite. The php-core bump does change failure semantics: failed jobs with null results now return a SharpApiJob instead of throwing TypeError, and a missing API key throws InvalidArgumentException. Audit any catch (TypeError ...) blocks or null-check logic before upgrading.
Why is my polling interval being ignored?
In earlier versions the use_polling_interval setting could be silently ignored, so the package fell back to Retry-After behavior. v1.1.0 fixes that config propagation bug and honors the polling interval you configure, including the SHARP_API_JOB_STATUS_USE_POLLING_INTERVAL path. After upgrading, expect call volume and latency characteristics to shift, so observe one full business cycle before locking the setting in.
When should I avoid sharpapi/laravel-resume-parser?
Avoid it if you need synchronous parsing, a fully self-hosted parser, or a non-Laravel PHP service. It is also a poor fit for serverless or edge runtimes where a long-lived polling loop is undesirable. Teams already on Laravel 10/11 with queue workers are the intended fit.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console