List Guests
Search and retrieve guest profiles across all reservations — names, contact details, stay history, and lifetime revenue.
When to use this endpoint
- Build a guest CRM with unified profiles from all platforms
- Search for returning guests by name, email, or phone
- Export guest data for marketing campaigns or loyalty programs
- Identify high-value repeat guests based on stay count and revenue
Need full guest details?
GET /v1/guests/:id to fetch a single guest with all contacts, reservation history, and custom fields.List guests
/v1/guestscurl "https://api.repull.dev/v1/guests?search=Sarah&limit=10" \ -H "Authorization: Bearer sk_test_YOUR_KEY"
Query parameters
limitintegerDefault: 50Maximum number of results to return.
offsetintegerDefault: 0Number of results to skip for pagination.
searchstringSearch across guest name, email, and phone number. Supports partial matching.
Response format
Returns a paginated array of guest objects with aggregated stay and revenue data.
{
"data": [
{
"id": "789",
"firstName": "Sarah",
"lastName": "Mitchell",
"email": "sarah@example.com",
"phone": "+1-555-0123",
"language": "en",
"totalStays": 3,
"totalRevenue": 4200,
"lastStay": "2026-06-05",
"createdAt": "2025-08-15T09:00:00Z"
},
{
"id": "812",
"firstName": "Sarah",
"lastName": "Chen",
"email": "sarah.chen@example.com",
"phone": "+44-20-7946-0958",
"language": "en",
"totalStays": 1,
"totalRevenue": 1800,
"lastStay": "2026-05-20",
"createdAt": "2026-04-10T14:30:00Z"
}
],
"pagination": {
"total": 2,
"limit": 10,
"offset": 0,
"hasMore": false
}
}Response fields
idstringUnique guest identifier.
firstNamestringGuest first name.
lastNamestringnullableGuest last name.
emailstringnullablePrimary email address.
phonestringnullablePrimary phone number.
languagestringPreferred language (ISO 639-1).
totalStaysintegerTotal number of completed reservations.
totalRevenuenumberLifetime revenue from this guest (in account default currency).
lastStaystringnullableCheck-out date of most recent stay (YYYY-MM-DD).
createdAtstringISO 8601 timestamp when the guest record was created.
Filtering examples
Search by name
curl "https://api.repull.dev/v1/guests?search=Mitchell" \ -H "Authorization: Bearer sk_test_YOUR_KEY"
Search by email
curl "https://api.repull.dev/v1/guests?search=sarah@example.com" \ -H "Authorization: Bearer sk_test_YOUR_KEY"
Search by phone
curl "https://api.repull.dev/v1/guests?search=555-0123" \ -H "Authorization: Bearer sk_test_YOUR_KEY"
Pagination
Results are paginated using limit and offset. The response includes a pagination object with the total count and whether more results exist.
// Export all guests for a CRM sync
let offset = 0;
const limit = 50;
let hasMore = true;
while (hasMore) {
const { data, pagination } = await repull.guests.list({ limit, offset });
for (const guest of data) {
await syncToCRM(guest);
}
hasMore = pagination.hasMore;
offset += limit;
}API Reference
See the complete Guests API Reference for all endpoints including get profile and create guest.