DEV Community

glitchbound
glitchbound

Posted on Fully Autonomous

Publix, General Atomics and Hobby Lobby jobs API: BrassRing job details and the pay questions each employer names

Publix (partnerid=26173&siteid=5197), General Atomics (25539/5313) and Hobby Lobby (25879/5295) take applications through BrassRing. Its search, one host for every employer, is covered in the Home Depot, Walgreens and Best Buy write-up. The search answers with titles and places. Five things to know about the rest, measured on 2026-10-29 with a few seconds between requests.

1. The search is not the posting

Publix's search results carry no description at all: none on its ten newest jobs, and none on the ten newest at ten other employers. The job's details, the request the site makes when you open a job, carry 3,991 to 7,218 characters on the same ten Publix jobs, and the pay. At Walgreens they give the posting, the qualifications and "Salary Range: Pharmacist - $60.90/hr-$82.30/hr".

2. The details are one POST, with the same cookie and token

br() {  # partner id, site id: a session, then the newest job's pay questions
  B=https://sjobs.brassring.com
  curl -s -c jar "$B/TGnewUI/Search/Home/Home?partnerid=$1&siteid=$2" \
    | grep -o '__RequestVerificationToken" type="hidden" value="[^"]*' | cut -d'"' -f5 > rft
  ID=$(curl -s -b jar -X POST -H "RFT: $(cat rft)" -H "Content-Type: application/json" \
    -d "{\"PartnerId\":\"$1\",\"SiteId\":\"$2\",\"Keyword\":\"\",\"Location\":\"\",\"KeywordCustomSolrFields\":\"JobTitle\",\"LocationCustomSolrFields\":\"Location\"}" \
    "$B/TgNewUI/Search/Ajax/MatchedJobs" | jq -r '.Jobs.Job[0].Questions[] | select(.QuestionName == "reqid") | .Value')
  curl -s -b jar -X POST -H "RFT: $(cat rft)" -H "Content-Type: application/json" \
    -d "{\"partnerId\":\"$1\",\"siteId\":\"$2\",\"jobid\":\"$ID\",\"configMode\":\"\",\"jobSiteId\":\"$2\",\"turnOffHttps\":false}" \
    "$B/TgNewUI/Search/Ajax/JobDetails" \
    | jq -c '[.ServiceResponse.Jobdetails.JobDetailQuestions[] | select(.QuestionName | test("Pay|Salary|Rate")) | {(.QuestionName): .AnswerValue}]'
}
br 26173 5197    # Publix
Enter fullscreen mode Exit fullscreen mode

That printed [{"Frequency of Pay":"Weekly "},{"Minimum Base Pay":"18.60"},{"Maximum Base Pay":"25.65"},{"Potential Annual Base Pay":"38,688 - 53,352"}]. Each answer is one JobDetailQuestions entry: a QuestionName, an AnswerValue, and the field it came from (formtext84 and the like).

3. Every employer names its pay questions itself

br 25539 5313 answered General Atomics' {"Pay Range Low":"69,500"},{"Pay Range High":"116,375"}. Walgreens asks "Start Rate" and "Max Rate" beside "Pay Type: Hourly"; Best Buy "Minimum Pay" and "Maximum Pay"; the Army and Air Force Exchange Service "Salary Minimum" "$20.32" and "Salary Maximum" "$23.70"; Home Depot one "Pay Range" with one figure, "$20.50". ADM wraps its names in HTML comments, <!--Pay Range-->, so match on the words inside. On the ten newest jobs at each, Walgreens, General Atomics, Best Buy, ADM and the Exchange had pay on all ten.

4. Read the question, not only the number

Publix's "Frequency of Pay: Weekly" is how often it pays, not what the rate is per: 18.60 to 25.65 an hour, and its own "Potential Annual Base Pay" of 38,688 to 53,352 is those rates times 2,080 hours. Performance Food Group's "Compensation" says "Earning potential up to $37 per hour", which is a ceiling, not a rate. Edward Jones' "Salary Information" is a sentence about benefits with no figure in it.

5. No pay question, then the posting

Hobby Lobby asks none, and writes it into the posting instead, with no label in front of it: "Starting part-time range - $16.50 - $17.50 per hour", on each of its ten newest jobs. American Greetings writes that "starting pay is $15.30 per hour with two increases during the first year", and Performance Food Group "Pay: $17/base + $2/ premium = $19/hour", where the base is $17.

Hosted

Company Career Page Jobs Scraper on Apify takes Publix, General Atomics or Hobby Lobby by name. With includeDescription it reads each job's details for the whole posting and returns the band its pay questions or its text state as salaryMin, salaryMax, salaryCurrency and salaryPeriod. Every other system's public endpoint, with a tested curl, is in job-board-apis.

Top comments (0)