agentsclimarketplace

Ror organization api

Skill brycewang-stanford/Auto-Empirical-Research-Skills/skills/43-wentorai-research-plugins/skills/literature/metadata/ror-organization-api

Identify and link research organizations via the ROR registry APIFrom its SKILL.md

Install
npx -y skills add brycewang-stanford/Auto-Empirical-Research-Skills --skill ror-organization-api

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.

SKILL.md

6.3 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it

ROR (Research Organization Registry) API

Overview

ROR is the community-led registry of open persistent identifiers for research organizations worldwide — 110,000+ entries covering universities, research institutes, government agencies, hospitals, and companies. The API enables affiliation disambiguation, institutional search, and metadata retrieval. Essential for bibliometrics, funder compliance, and research analytics. Free, no authentication required.

API Endpoints

Base URL

https://api.ror.org/v2

Search Organizations

# Text search
curl "https://api.ror.org/v2/organizations?query=MIT"

# Affiliation matching (fuzzy match for messy affiliation strings)
curl "https://api.ror.org/v2/organizations?affiliation=Dept+of+CS,+Massachusetts+Inst+of+Technology"

# Filter by country
curl "https://api.ror.org/v2/organizations?query=university&filter=locations.geonames_details.country_code:US"

# Filter by organization type
curl "https://api.ror.org/v2/organizations?query=research&filter=types:facility"

Get Organization by ROR ID

# Retrieve full record
curl "https://api.ror.org/v2/organizations/https://ror.org/042nb2s44"

# Also works with just the ID portion
curl "https://api.ror.org/v2/organizations/042nb2s44"

Query Parameters

ParameterDescriptionExample
queryText searchquery=Harvard
affiliationFuzzy affiliation matchaffiliation=MIT Cambridge MA
filterFaceted filteringfilter=types:education
pagePage number (1-based)page=2

Organization Types

TypeDescription
educationUniversities, colleges
facilityResearch facilities, labs
healthcareHospitals, medical centers
companyCompanies with research activities
governmentGovernment agencies
nonprofitNon-profit research organizations
funderFunding agencies
archiveArchives, libraries

Response Structure

{
  "number_of_results": 3,
  "items": [
    {
      "id": "https://ror.org/042nb2s44",
      "names": [
        {"value": "Massachusetts Institute of Technology", "types": ["ror_display"]},
        {"value": "MIT", "types": ["acronym"]}
      ],
      "types": ["education"],
      "locations": [
        {
          "geonames_details": {
            "country_code": "US",
            "country_name": "United States",
            "name": "Cambridge"
          }
        }
      ],
      "external_ids": [
        {"type": "isni", "all": ["0000 0001 2341 2786"]},
        {"type": "grid", "all": ["grid.116068.8"]},
        {"type": "wikidata", "all": ["Q49108"]}
      ],
      "links": [{"type": "website", "value": "https://www.mit.edu/"}],
      "relationships": [
        {"id": "https://ror.org/01a8ajp77", "label": "Lincoln Laboratory", "type": "child"}
      ],
      "status": "active",
      "established": 1861
    }
  ]
}

Python Usage

import requests

BASE_URL = "https://api.ror.org/v2/organizations"


def search_organizations(query: str,
                         country: str = None,
                         org_type: str = None) -> list:
    """Search ROR for research organizations."""
    params = {"query": query}
    filters = []
    if country:
        filters.append(
            f"locations.geonames_details.country_code:{country}")
    if org_type:
        filters.append(f"types:{org_type}")
    if filters:
        params["filter"] = ",".join(filters)

    resp = requests.get(BASE_URL, params=params)
    resp.raise_for_status()
    data = resp.json()

    results = []
    for org in data.get("items", []):
        display_name = next(
            (n["value"] for n in org.get("names", [])
             if "ror_display" in n.get("types", [])),
            org.get("names", [{}])[0].get("value", ""),
        )
        acronyms = [n["value"] for n in org.get("names", [])
                     if "acronym" in n.get("types", [])]
        loc = org.get("locations", [{}])[0].get("geonames_details", {})

        results.append({
            "ror_id": org.get("id"),
            "name": display_name,
            "acronyms": acronyms,
            "types": org.get("types", []),
            "country": loc.get("country_name"),
            "city": loc.get("name"),
            "established": org.get("established"),
        })
    return results


def match_affiliation(affiliation_string: str) -> dict:
    """Disambiguate a messy affiliation string to a ROR record."""
    resp = requests.get(
        BASE_URL,
        params={"affiliation": affiliation_string},
    )
    resp.raise_for_status()
    items = resp.json().get("items", [])
    if items and items[0].get("chosen"):
        return items[0].get("organization", {})
    return items[0] if items else {}


def get_organization(ror_id: str) -> dict:
    """Get full ROR record for an organization."""
    resp = requests.get(f"{BASE_URL}/{ror_id}")
    resp.raise_for_status()
    return resp.json()


# Example: find German research institutes
orgs = search_organizations("Max Planck", country="DE",
                            org_type="facility")
for o in orgs:
    print(f"{o['name']} ({', '.join(o['acronyms'])}) "
          f"— {o['city']}, {o['country']} (est. {o['established']})")

# Example: disambiguate messy affiliations
result = match_affiliation(
    "Dept. of Computer Sci., Stanford Univ., CA, USA")
print(f"Matched: {result.get('id')} — "
      f"{result.get('names', [{}])[0].get('value')}")

Use Cases

  1. Affiliation disambiguation: Clean messy author affiliation strings
  2. Bibliometric analysis: Aggregate publications by institution
  3. Funder compliance: Link outputs to institutional identifiers
  4. Research profiling: Map institutional research portfolios
  5. Collaboration networks: Trace inter-institutional partnerships

References

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 326,144. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.