Algolia logo blueprint

Looking for our logo?

We got you covered!

Download logo pack More algolia assets

Algolia SaaS search and discovery

Secure & reliable search that scales with your business

Increase user retention with fast and relevant search,powered by Algolia’s Search API.

Free Trial

Or talk to one of our Product specialists

Laptop mockup

The World’s leading SaaS companies trust Algolia’s Search APIs

Flexport logo

“Algolia has become so mission critical for navigating our application that users instantly notice whenever we ship a new enhancement to our Algolia implementation.”

Desmond Brand
Director of engineering
Zendesk logo

“Algolia’s federated search helps us facilitate seamless customer experiences by empowering our employees to easily and quickly find the relevant information and resources they need to do their job every day.”

Brit Atilano
Program manager, IT operations
Zendesk logo
ShipStation logo
Sense logo
Wework logo
Aftership logo
Weight Watchers logo
Developers first illustration
Reliability illustration

Reliable

With Algolia, you don’t have to worry about search going down. An available 99.999% SLA ensures that you can rely on our APIs, so your team can focus on building great products for your users, rather than on maintaining core services.

Scalability illustration

Scalable

Whether you’re building an MVP or adding search for millions of users, Algolia provides you with the search stack that scales to your use case. With 55+ data centers on 6 continents, Algolia gives your users a lightning-fast search experience anywhere in the world. In 2017, Algolia returned 99% of search queries in under 17ms.

Integrating Algolia to any app is a breeze

Use our APIs to customize and integrate great search and discovery in your app or website.

BackendFrontend
my_index = Algolia::Index.new('contacts')
my_index.add_object :firstname => "Jimmie",
:lastname => "Barninger",
:company => "California Paint"
class Contact < ActiveRecord::Base
include AlgoliaSearch
algoliasearch do
attribute :firstname, :lastname, :company
end
end
myIndex = apiClient.init_index("contacts")
myIndex.add_object({
"firstname": "Jimmie",
"lastname": "Barninger",
"company": "California Paint"
})
from django.contrib.algoliasearch import AlgoliaIndex
class YourModelIndex(AlgoliaIndex):
fields = ('firstname', 'lastname', 'company')
$myIndex = $apiClient->initIndex("contacts");
$myIndex->addObject([
"firstname" => "Jimmie",
"lastname" => "Barninger",
"company" => "California Paint",
]);
/**
* @ORM\Entity
*/
class Contact
{
/**
* @var string
*
* @ORM\Column(name="firstname", type="string")
* @Group({searchable})
*/
protected $firstname;
/**
* @var string
*
* @ORM\Column(name="lastname", type="string")
* @Group({searchable})
*/
protected $lastname;
/**
* @var string
*
* @ORM\Column(name="company", type="string")
* @Group({searchable})
*/
protected $company;
}
use Illuminate\Database\Eloquent\Model;
use Laravel\Scout\Searchable;
class Contact extends Model
{
use Searchable; // Simply add a trait
}
const myIndex = apiClient.initIndex('contacts');
myIndex
.addObject({
firstname: 'Jimmie',
lastname: 'Barninger',
company: 'California Paint',
})
.then(content => console.log(content))
.catch(err => console.error(err));
Index<Contact> index = client
.initIndex("contacts", Contact.class);
index.addObject(
new Contact()
.setFirstname("Jimmie")
.setLastname("Barninger")
.setCompany("California Paint")
);
import algolia.AlgoliaDsl._
import scala.concurrent.ExecutionContext.Implicits.global
case class Contact(
firstname: String,
lastname: String,
company: String
)
val indexing: Future[Indexing] = client.execute {
index into "contacts" `object` Contact(
"Jimmie",
"Barninger",
"California Paint"
)
}
object := map[string]string{
"firstname": "Jimmie",
"lastname": "Barninger",
"company": "California Paint"
}
res, err := index.SaveObject(object)
SearchIndex index = client.InitIndex("contacts");
var contact = new Contact
{
FirstName = "Jimmie",
LastName = "Barninger",
Company = "California Paint"
};
index.SaveObject(contact);
val index = client.initIndex(IndexName("contacts"))
val json = json {
"firstname" to "Jimmie"
"lastname" to "Barninger"
"company" to "California Paint"}
index.saveObject(json)
let myIndex = apiClient.getIndex("contacts")
let n = [
"firstname": "Jimmie",
"lastname": "Barninger",
"company": "California Paint"
]
myIndex.addObject(n)
Index myIndex = apiClient.initIndex("contacts");
JSONObject jsonObject = new JSONObject()
.put("firstname", "Jimmie")
.put("lastname", "Barninger")
.put("company", "California Paint");
myIndex.addObjectAsync(jsonObject, null);
<div id="searchbox"></div>
<div id="hits"></div>
<script>
const {
searchBox,
hits
} = instantsearch.widgets;
search.addWidget(
searchBox({ container: "#searchbox" })
);
search.addWidget(
hits({ container: "#hits" })
);
search.start();
</script>
const App = (
<InstantSearch>
<SearchBox />
<Hits />
<Pagination />
<RefinementList
attribute="company"
/>
</InstantSearch>
);
<RelativeLayout
xmlns:algolia="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.algolia.instantsearch.ui.views.SearchBox
android:id="@+id/search_box"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.algolia.instantsearch.ui.views.Stats
android:id="@+id/search_box"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<com.algolia.instantsearch.ui.views.Hits
android:layout_width="match_parent"
android:layout_height="wrap_content"
algolia:itemLayout="@layout/hits_item"/>
</RelativeLayout>
<ais-instant-search>
<ais-search-box />
<ais-hits>
<template slot="item" scope="{ item }">
<h2>{{ item.company }}</h2>
<p>{{ item.firstname }} {{ item.lastname }}</p>
</template>
</ais-hits>
<ais-refinement-list attribute="company" />
<ais-pagination />
</ais-instant-search>
<ais-instantsearch>
<ais-search-box></ais-search-box>
<ais-hits>
<ng-template let-hits="hits">
<div *ngFor="let hit of hits">
<h2>{{ hit.company }}</h2>
<p>{{ hit.firstname }} {{ hit.lastname }}</p>
</div>
</ng-template>
</ais-hits>
</ais-instantsearch>
import InstantSearch
override func viewDidLoad() {
super.viewDidLoad()
let searchBar = SearchBarWidget(frame: ...)
let statsWidget = StatsLabelWidget(frame: ...)
self.view.addSubview(searchBar)
self.view.addSubview(statsWidget)
// Add all widgets in view to InstantSearch
InstantSearch.shared.registerAllWidgets(in: self.view)
}
Get started with our APIs