JU

juicebox-data-handling

A guide to implementing GDPR-compliant data handling, encryption, and privacy controls for Juicebox recruitment datasets.

Install

mkdir -p .claude/skills/juicebox-data-handling && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/8634" && unzip -o skill.zip -d .claude/skills/juicebox-data-handling && rm skill.zip

Installs to .claude/skills/juicebox-data-handling

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Juicebox data privacy and GDPR.
31 charsno explicit “when” trigger
Intermediate

Key capabilities

  • Classify data types by sensitivity, retention, encryption.
  • Import people datasets from Juicebox API.
  • Export analysis results with contact info sanitized.
  • Validate profile data for required fields and format.
  • Track GDPR consent and support right-to-deletion.
  • Encrypt contact data at field level with per-tenant keys.

How it works

This skill defines data handling standards for Juicebox AI, classifying data by sensitivity and retention, and providing functions for importing, exporting, and validating profile data while ensuring compliance with privacy regulations.

Inputs & outputs

You give it
Juicebox API query, raw profile data, analysis results
You get back
Classified data, imported profiles, sanitized exports, validation errors

When to use juicebox-data-handling

  • Implement GDPR data deletion support
  • Apply field-level encryption to contact data
  • Manage candidate PII retention policies
  • Audit access controls for recruitment datasets

About this skill

Juicebox Data Handling

Overview

Juicebox AI processes people datasets for talent intelligence and analysis workflows. Data types include people search results, enriched profile records (employment history, skills, social links), analysis exports, and outreach logs. Profile data often contains personal information governed by GDPR, CCPA, and recruitment privacy regulations. All enrichment results must be handled with consent tracking, purpose limitation, and right-to-deletion support. Contact data requires field-level encryption and strict access controls to prevent unauthorized disclosure.

Data Classification

Data TypeSensitivityRetentionEncryption
Search resultsLowSession only (ephemeral)TLS in transit
Enriched profilesHigh (PII)Per data policy, max 1 yearAES-256 at rest
Contact data (email/phone)High (PII)Until candidate objects or deletionField-level encryption
Analysis exportsMedium90 daysAES-256 at rest
Outreach logsMedium6 monthsAES-256 at rest

Data Import

interface JuiceboxProfile {
  id: string; name: string; email?: string; phone?: string;
  company: string; title: string; skills: string[];
  source: string; enrichedAt: string;
}

async function importPeopleDataset(query: string, maxResults = 100): Promise<JuiceboxProfile[]> {
  const profiles: JuiceboxProfile[] = [];
  let offset = 0;
  do {
    const res = await fetch(`https://api.juicebox.ai/v1/search`, {
      method: 'POST',
      headers: { Authorization: `Bearer ${process.env.JUICEBOX_API_KEY}`, 'Content-Type': 'application/json' },
      body: JSON.stringify({ query, limit: 50, offset }),
    });
    const data = await res.json();
    if (!data.results?.length) break;
    for (const p of data.results) {
      if (!p.id || !p.name) throw new Error(`Invalid profile: missing required fields`);
      profiles.push(p);
    }
    offset += 50;
  } while (profiles.length < maxResults);
  return profiles;
}

Data Export

async function exportAnalysisResults(profiles: JuiceboxProfile[], format: 'csv' | 'json') {
  // Strip direct contact info from exports unless explicitly authorized
  const sanitized = profiles.map(({ email, phone, ...rest }) => ({
    ...rest,
    email: email ? '[CONSENT_REQUIRED]' : undefined,
    phone: phone ? '[CONSENT_REQUIRED]' : undefined,
  }));
  if (format === 'csv') {
    const header = Object.keys(sanitized[0]).join(',');
    const rows = sanitized.map(r => Object.values(r).join(','));
    return [header, ...rows].join('\n');
  }
  return JSON.stringify(sanitized, null, 2);
}

Data Validation

function validateProfile(p: JuiceboxProfile): string[] {
  const errors: string[] = [];
  if (!p.id) errors.push('Missing profile ID');
  if (!p.name || p.name.length > 200) errors.push('Invalid or missing name');
  if (p.email && !/^[\w.+-]+@[\w-]+\.[\w.]+$/.test(p.email)) errors.push('Invalid email format');
  if (p.phone && !/^\+?[\d\s()-]{7,20}$/.test(p.phone)) errors.push('Invalid phone format');
  if (!p.source) errors.push('Missing data source attribution');
  if (p.enrichedAt && isNaN(Date.parse(p.enrichedAt))) errors.push('Invalid enrichment timestamp');
  return errors;
}

Compliance

  • GDPR consent tracked per profile: lawful basis recorded (consent, legitimate interest)
  • Right-to-deletion: purge profile, enrichment data, and outreach logs within 30 days of request
  • GDPR data subject access: export all stored data for a candidate on request
  • CCPA opt-out: honor Do Not Sell signals for California residents
  • Purpose limitation: enrichment data used only for stated recruitment/analysis purpose
  • Contact data encrypted at field level with per-tenant keys
  • Audit log for all profile access, export, and deletion events
  • Data minimization: auto-purge enriched profiles older than retention window

Error Handling

IssueCauseFix
API 401 unauthorizedExpired or revoked API keyRotate key in secret manager, update env
Duplicate profiles in importSame person from multiple sourcesDeduplicate by email hash before storage
GDPR deletion incompleteOutreach logs not purged alongside profileCascade delete across all related tables
Export contains raw PIIConsent flag not checked before exportAdd consent gate in exportAnalysisResults
Enrichment timeoutUpstream data provider slowImplement 10s timeout with retry, fallback to cached

Resources

Next Steps

See juicebox-security-basics.

When not to use it

  • When Juicebox API key is expired or revoked.
  • When outreach logs are not purged alongside profile deletion.

Limitations

  • Duplicate profiles may appear if from multiple sources.
  • GDPR deletion may be incomplete if outreach logs are not purged.
  • Export may contain raw PII if consent flag is not checked.

How it compares

This skill provides specific code examples and compliance checklists for Juicebox data, offering a structured approach to PII handling compared to general data privacy guidelines.

Compared to similar skills

juicebox-data-handling side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
juicebox-data-handling (this skill)025dReviewIntermediate
gdpr-dsgvo-expert87moReviewAdvanced
data-privacy-compliance47moNo flagsIntermediate
ra-qm-skills12moReviewAdvanced

Try saying

Example prompts that trigger this skill in your AI assistant.

More by jeremylongshore

View all by jeremylongshore

analyzing-logs

jeremylongshore

Analyze application logs to detect performance issues, identify error patterns, and improve stability by extracting key insights.

14123

ollama-setup

jeremylongshore

Configure auto-configure Ollama when user needs local LLM deployment, free AI alternatives, or wants to eliminate hosted API costs. Trigger phrases: "install ollama", "local AI", "free LLM", "self-hosted AI", "replace OpenAI", "no API costs". Use when appropriate context detected. Trigger with relevant phrases based on skill purpose.

1167

backtesting-trading-strategies

jeremylongshore

Backtest crypto and traditional trading strategies against historical data. Calculates performance metrics (Sharpe, Sortino, max drawdown), generates equity curves, and optimizes strategy parameters. Use when user wants to test a trading strategy, validate signals, or compare approaches. Trigger with phrases like "backtest strategy", "test trading strategy", "historical performance", "simulate trades", "optimize parameters", or "validate signals".

1071

generating-database-seed-data

jeremylongshore

Process this skill enables AI assistant to generate realistic test data and database seed scripts for development and testing environments. it uses faker libraries to create realistic data, maintains relational integrity, and allows configurable data volumes. u... Use when working with databases or data models. Trigger with phrases like 'database', 'query', or 'schema'.

1033

cursor-codebase-indexing

jeremylongshore

Execute set up and optimize Cursor codebase indexing. Triggers on "cursor index setup", "codebase indexing", "index codebase", "cursor semantic search". Use when working with cursor codebase indexing functionality. Trigger with phrases like "cursor codebase indexing", "cursor indexing", "cursor".

885

testing-mobile-apps

jeremylongshore

Execute mobile app testing on iOS and Android devices/simulators. Use when performing specialized testing. Trigger with phrases like "test mobile app", "run iOS tests", or "validate Android functionality".

810

Search skills

Search the agent skills registry