SuccessFactors Data Collection Guide

For the Review Prep extension feature. Do this at work in Edge/Chrome.

Contents
  1. Method 1: DOM Scraping (Recommended)
  2. Method 2: OData API (Alternative)
  3. Filling Out review-config.json
  4. Quick Checklist

Method 1: DOM Scraping via CSS Selectors

RECOMMENDED No API access needed. Works with what you have today.

The extension will use CSS selectors to find and read elements on the SuccessFactors review page. You need to identify these selectors once, then put them in the config file.

What You Need

Step-by-Step

1
Open a review form in SuccessFactors. Navigate to the performance review page for any employee (your own is fine for collecting selectors). Make sure the full form is loaded and expanded, not just the summary view.
2
Open DevTools. Press F12 or right-click anywhere and choose Inspect. The Elements panel should be visible.
3
Note the page URL pattern. Look at the address bar. Copy the part that identifies this as a review page. It will be something like:
https://performancemanager*.successfactors.com/sf/liveprofile?...

You need enough of the URL to uniquely identify "I'm on a review form." Copy it to a notepad.

4
Find the employee name. Right-click the employee's name at the top of the form and click Inspect. In the Elements panel, the HTML element will be highlighted. You need a CSS selector that uniquely targets it.

How to get the selector: Right-click the highlighted element in DevTools, choose Copy > Copy selector. Paste it into your notepad. It might look like:
#formHeaderName div.formHeader span.empName [data-automation-id="employee-name"]
Prefer selectors with meaningful names (IDs, data attributes, class names that describe purpose) over long auto-generated paths like div > div:nth-child(3) > span. The shorter/more semantic ones survive UI updates better.
5
Find the goals section. This is the most important part. You need selectors for:
  • Goal container: The wrapper around each individual goal. Right-click on the boundary of one goal block and Inspect. There should be a repeating element (one per goal). Look for a class like goalSection, goalItem, or a data-* attribute.
  • Within each goal, find:
FieldWhat to look forConfig key
Goal TitleThe name of the goal (bold text, usually first line)goals.fields.title
MetricThe measurable success criteria (below the title)goals.fields.metric
Status"Completed" / "In Progress" / etc.goals.fields.status
MilestonesOften says "No Data"goals.fields.milestones
Self-EvaluationThe employee's narrative text blockgoals.fields.self_evaluation
Employee RatingOnly on first ~6-7 goals. A dropdown or display field.goals.fields.employee_rating
Manager RatingPresent on all goals.goals.fields.manager_rating
For each field: right-click it, Inspect, then right-click the element in DevTools and Copy > Copy selector. These selectors should be relative to the goal container, not absolute paths. Example: if the goal container is div.goalSection and the title inside it is span.goalTitle, you want just span.goalTitle for the title field.
6
Find the Overall Goal Summary. Scroll to the section that summarizes all goals collectively (not an individual goal). Right-click, Inspect, copy the selector.
7
Find the competencies section. Same process as goals:
  • Competency container: The repeating wrapper around each of the 4 competency blocks (Confident and Agile, Engage and Inspire, Innovate and Improve, Own It).
FieldWhat to look forConfig key
NameThe competency category namecompetencies.fields.name
DefinitionsBullet-point rubric textcompetencies.fields.definitions
Self-AssessmentEmployee's narrative textcompetencies.fields.self_assessment
Employee RatingDropdown or displaycompetencies.fields.employee_rating
Manager RatingDropdown or displaycompetencies.fields.manager_rating
8
Find the Overall Competency Summary. The section summarizing all competencies. Right-click, Inspect, copy selector.
9
Find the Overall Comments section. This is the employee's own summary comments at the bottom. Right-click, Inspect, copy selector.
10
Find a page indicator element. Look for any DOM element that only exists on review forms (not on other SF pages). This helps the extension know when to activate. Could be a form title, a specific container ID, or a unique class. Copy that selector.
Shortcut: If the form is complex and deeply nested, try this in the DevTools Console tab:
// Find all elements with "goal" in their class name document.querySelectorAll('[class*="goal" i]') // Find all elements with "competenc" in their class name document.querySelectorAll('[class*="competenc" i]') // Find all elements with data attributes document.querySelectorAll('[data-automation-id]')
This can help you discover the naming patterns SuccessFactors uses.

Method 2: OData API (Alternative)

ALTERNATIVE Cleaner data, but requires API to be enabled on your org's instance.

SuccessFactors has an OData REST API. If it's active, you get structured JSON instead of scraping HTML. More reliable, less brittle. But it might not be available to you.

Step 1: Check if the API is Active

1
Open the review form in SuccessFactors (same as Method 1, Step 1).
2
Open DevTools (F12), go to the Network tab.
3
Clear the network log (click the circle-with-a-line icon), then reload the page.
4
Filter by "odata" or "api". In the Network tab filter box, type odata. Look for requests that hit URLs containing:
/odata/v2/ /api/ /Goal/ /FormContent/ /Competency/

If you see requests like these, the API is active and your browser's session cookie is authenticating automatically.

5
Click one of those requests. Check the Response tab. You should see JSON or XML data. If you see structured goal/competency data, the API is returning what we need.
6
Copy the full request URL. Click the request in the Network tab, go to the Headers tab, and copy the Request URL. Also note:
  • The base URL (everything before /odata/v2/ or /api/)
  • The entity name (like FormContent, Goal, etc.)
  • Any query parameters (like $filter, $select, $expand)
7
Copy the response JSON. In the Response tab, right-click and Copy. Save it somewhere. This is what we'll use to understand the data structure.
If you see NO odata/api requests: The UI is likely rendering server-side HTML, and the OData API either isn't enabled or isn't used by the review form. Fall back to Method 1.

Step 2: Test the API Directly (Optional)

If Step 1 found API calls, try hitting the endpoint directly in a new browser tab to confirm your session works:

8
Open a new tab and paste the OData URL you copied. If you get JSON/XML back, your session cookie works. If you get a 401 or login redirect, the API requires separate auth.
9
Try querying the metadata. Replace the entity path with $metadata:
https://your-sf-instance.successfactors.com/odata/v2/$metadata
This returns the full schema. It shows every entity (Goal, Competency, FormContent, etc.) and their fields. Screenshot or save this if it works.
What to bring back: If the API works, we don't need CSS selectors at all. Instead, bring back:

Filling Out review-config.json

CONFIG FILE Located at: anvil/work-prompts/reviews/review-config.json

After collecting selectors (Method 1), open review-config.json and replace every FILL_IN with the selector you found. Here's a mapping of what goes where:

Config PathWhat to PutExample
page_detection.url_pattern Part of the URL that identifies a review page successfactors.com/sf/liveprofile
page_detection.page_indicator_selector A DOM element unique to review forms #performanceReviewForm
employee_name.selector The employee name element span.empName
goals.container_selector Repeating wrapper per goal div.goalSection
goals.fields.title Goal name (relative to container) span.goalTitle
goals.fields.metric Measurable criteria span.goalMetric
goals.fields.status Completed / In Progress span.goalStatus
goals.fields.milestones Usually "No Data" div.milestoneSection
goals.fields.self_evaluation Employee narrative text textarea.selfEval, div.selfEvalText
goals.fields.employee_rating Rating (first ~6-7 goals only) select.empRating, span.empRating
goals.fields.manager_rating Manager rating field select.mgrRating, span.mgrRating
goals.overall_summary.selector Section summarizing all goals div.overallGoalSummary
competencies.container_selector Repeating wrapper per competency div.competencySection
competencies.fields.name Category name span.compName
competencies.fields.definitions Bullet rubric text div.compDefinitions
competencies.fields.self_assessment Employee narrative textarea.compSelfAssessment
competencies.fields.employee_rating Employee rating select.compEmpRating
competencies.fields.manager_rating Manager rating select.compMgrRating
competencies.overall_summary.selector Section summarizing all competencies div.overallCompSummary
overall_comments.selector Employee's summary comments textarea.overallComments
Tips:
If you went with Method 2 (OData API): You won't need CSS selectors. Instead, bring back the base URL, entity names, and a sample response. We'll build an API-based config instead.

Quick Checklist

Print this or keep it open on your phone while at work.

Method 1 (DOM Scraping) Checklist

Method 2 (OData API) Checklist

Bonus (While You're There)