The IPIP-NEO (International Personality Item Pool representation of the NEO PI-R™) is a free, public domain personality assessment based on the Five Factor Model (FFM) of personality, also known as the Big Five or OCEAN model. It was developed by Lewis R. Goldberg and refined by Dr. John A. Johnson of Penn State University, and is widely used in published academic research as a substitute for the proprietary NEO PI-R instrument.

See also: Briggs Meyer

The Big Five (OCEAN)

The five domains, each composed of six facets (30 facets in total):

DomainHigh score suggests
OpennessCuriosity, imagination, creativity, aesthetic sensitivity
ConscientiousnessOrganisation, discipline, reliability, goal-directedness
ExtraversionSociability, assertiveness, positive emotionality
AgreeablenessCooperativeness, trust, empathy, altruism
NeuroticismAnxiety, emotional instability, moodiness

Scores are reported as percentiles (0–100). A score of 50 is exactly average for your age and sex. 75+ is high; 25 or below is low. Each domain score is broken down into six facet scores, which reveal which aspects of that domain are driving your result.

Versions

There are three versions of the IPIP-NEO, all publicly available:

IPIP-NEO-300 — The full-length version. 300 questions measuring all five domains and all 30 facets in detail. Takes approximately 30–40 minutes. Most closely modelled on the original NEO PI-R. Best for detailed, facet-level insight.

IPIP-NEO-120 — A mid-length version developed by Dr. John A. Johnson. 120 questions, same five domains and 30 facets but with fewer items per facet. Better reliability than the 60-item version, takes around 10–15 minutes.

IPIP-NEO-60 — The shortest version. 60 questions, domain-level scores only (no facet breakdown). Quick but least precise.

Online versions

Open source implementations

Repo: https://github.com/NeuroQuestAi/five-factor-e
PyPI: five-factor-e
Supports: IPIP-NEO-300 and IPIP-NEO-120
Dependencies: None (pure Python)
Endorsed by Dr. Johnson

Supports both a command-line interactive quiz and a Python library API. Answers are passed as structured JSON; results are returned as percentile scores broken down by domain and facet. Results are also saved to a JSON file in the run/ directory.

Python — IPIP-NEO-PI (offline server)

Repo: https://github.com/kholia/IPIP-NEO-PI

A Python 3 port of Dr. Johnson’s original software. Runs as a local web server, stores results in a local SQLite database. The five-factor-e project above is based on this one.

JavaScript / Node — b5-costa-mccrae-300-ipip-neo-pi-r

Repo: https://github.com/Alheimsins/b5-costa-mccrae-300-ipip-neo-pi-r
npm: @alheimsins/b5-costa-mccrae-300-ipip-neo-pi-r

An npm module that returns all 300 IPIP-NEO-PI-R items, with support for question shuffling and multiple languages including Norwegian.

Installing and running five-factor-e on macOS

macOS with Homebrew manages its own Python environment and blocks system-wide pip installs. The correct approach is to use pipx, which installs Python CLI tools in isolated environments without touching system Python.

Step 1 — Install pipx

brew install pipx

Step 2 — Install five-factor-e

pipx install "five-factor-e[quiz]"

The [quiz] extra adds terminal bar chart graphs at the end of the test. If ipipneo-quiz is not found after installation, run:

pipx ensurepath

Then close and reopen your terminal.

Step 3 — Take the test

ipipneo-quiz

Work through the setup prompts as follows:

> Do you wish to continue? Yes / No: yes
> What inventory model will you make? 120 / 300: 300
> What is your sex? Male, Female, or Neutral? M / F / N: F
> What is your age? 47
> Do you want to shuffle the questions? Yes / No: Yes

0. IPIP-NEO Original
> Choose the language of the questions above: 0

⚠️ Gotcha: The language prompt shows a numbered list. You must type the number (0 for English), not the word English — it will loop indefinitely if you type the language name.

Answer each question with a number 1–5:

AnswerValue
Very Inaccurate1
Moderately Inaccurate2
Neither Accurate Nor Inaccurate3
Moderately Accurate4
Very Accurate5

Results are displayed in the terminal with bar charts and saved as JSON in a run/ folder in the directory you ran the command from.

Using the Python API directly

from ipipneo import IpipNeo
import json
 
with open("my_answers.json") as f:
    answers = json.load(f)
 
# sex: "M", "F", or "N" (neutral/non-binary)
result = IpipNeo(question=300).compute(sex="F", age=47, answers=answers)
print(json.dumps(result, indent=2))

The answers JSON format expected by the library:

{
  "answers": [
    { "id_question": 1, "id_select": 4 },
    { "id_question": 2, "id_select": 2 }
  ]
}

id_question is the question number (1–300) and id_select is the answer (1–5). Order does not matter. Question text for each ID is in data/IPIP-NEO/300/questions.json in the repo.

Resources