An Interactive Introduction to Search and Matching Models

A large-firm approach for undergraduate teaching

Jose Silva 2026

The live simulator below runs entirely in your browser—no installation, no internet connection required after the page loads. Mathematics is rendered by MathJax (loads from a CDN on first visit, then cached).

This page presents a simple search-and-matching model designed for undergraduate teaching, with an interactive simulator that runs directly in your browser. The framework combines labor-market frictions, vacancy creation, wage bargaining, and equilibrium unemployment in a transparent large-firm environment. Equilibrium is characterized geometrically as the intersection of an upward-sloping wage curve and a downward-sloping job creation curve.

§1Introduction

In real labor markets, unemployed workers do not instantly find jobs and firms do not instantly hire workers. Workers search for employment opportunities while firms post vacancies and recruit employees, and because matching takes time and resources, unemployment and vacancies coexist in equilibrium. The empirical regularity that emerges from this coexistence is the Beveridge curve: a downward-sloping relationship between the unemployment rate and the vacancy rate, traced out over the business cycle. The U.S. Bureau of Labor Statistics publishes an interactive version of this curve, updated monthly: The Beveridge Curve (job openings rate vs. unemployment rate), seasonally adjusted. The model presented on this page is, in essence, a theory of why this curve exists and what shifts it.

Search-and-matching models provide a unified framework for studying equilibrium unemployment, job creation, labor-market tightness, wage determination, the Beveridge curve, and labor-market policy. The version presented here uses a large-firm formulation in which a representative multi-worker firm chooses how many vacancies to post, taking the wage and the vacancy-filling rate as given.

By the end of this page you should be able to:

  1. explain why unemployment and vacancies coexist in equilibrium;
  2. locate equilibrium graphically as the intersection of the wage curve (WC) and the job creation curve (JC);
  3. compute equilibrium tightness, wages, and unemployment numerically;
  4. interpret the Beveridge curve;
  5. perform comparative statics with respect to the seven structural parameters;
  6. run policy experiments using the live simulator embedded in this page.
A note on what this page does and doesn't do The model is continuous-time and dynamic at the aggregate-flow level: stocks of employment, unemployment, and vacancies evolve via differential equations, and the Beveridge curve and the steady-state unemployment rate are derived from these flow equations. The firm's hiring problem, however, is solved as a steady-state reduced-form optimization rather than as a fully intertemporal dynamic program with asset values for filled jobs and vacancies. This is a deliberate pedagogical choice: the reduced form delivers the same job creation condition as the dynamic-programming formulation in steady state under our assumptions, but it is accessible without the Bellman-equation apparatus. The same applies to the Nash-bargaining wage equation: we work directly with the reduced-form match surplus rather than with worker and firm asset values. Readers who want the fully dynamic version are referred to Pissarides (2000), the canonical treatment.

§2Environment

Time is continuous. The economy is populated by a unit mass of identical workers. The labor market features search frictions: workers and firms cannot meet instantaneously.

At each instant, a worker is either employed or unemployed. Let $e$ denote the aggregate employment rate and $u$ the aggregate unemployment rate. Because the labor force is normalized to one,

$$e + u = 1.$$

We use lowercase letters throughout the body for aggregate quantities ($e$ for employment, $u$ for unemployment, $v$ for vacancies). The matching function below uses these aggregates. Appendix A introduces uppercase $E$ and $V$ for the firm-level optimization problem and shows how per-firm and aggregate quantities are related.

Why a representative firm? The classical Pissarides exposition uses many small one-job firms with free entry. Here we use a representative large firm that employs many workers and decides how many vacancies to post. The two formulations deliver the same equilibrium under our assumptions, but the large-firm version is closer to how real employers behave—they post many vacancies at once—and is the natural starting point for richer extensions.

§3Matching technology

Matches between unemployed workers and vacancies are created according to the matching function

$$M(u, v) = \phi\, u^{1-\alpha}\, v^{\alpha}, \qquad \phi > 0, \;\; \alpha \in (0,1),$$

where $v$ denotes vacancies, $\phi$ measures matching efficiency, and $\alpha$ is the elasticity of new matches with respect to vacancies.

Define labor-market tightness $\theta \equiv v/u$. The probability per unit of time that an unemployed worker finds a job (the job-finding rate) is

$$p(\theta) \equiv \frac{M}{u} = \phi\, \theta^{\alpha},$$

and the probability per unit of time that a vacancy is filled (the vacancy-filling rate) is

$$q(\theta) \equiv \frac{M}{v} = \phi\, \theta^{-(1-\alpha)}.$$
Key result Tightness simultaneously affects both sides of the market: tighter markets help workers find jobs ($p$ rises with $\theta$) but make hiring harder for firms ($q$ falls with $\theta$). The accounting identity $p(\theta) = \theta\, q(\theta)$ holds at every $\theta$. This trade-off is at the heart of the model.

§4Firms

Each employed worker produces a constant flow of output equal to $A$, so aggregate output is $Y = A\, e$. Firms collectively pay a wage $w$ to each employed worker and post $v$ vacancies in total at flow cost $c$ per vacancy. Filled jobs separate exogenously at rate $s$.

Aggregate employment evolves according to

$$\dot e \;=\; q(\theta)\, v \;-\; s\, e.$$

The first term captures successful hiring (the vacancy-filling rate times the stock of vacancies); the second captures job destruction (the separation rate times the stock of employed workers). Aggregate flow profits are $\Pi = A\, e - w\, e - c\, v$.

Aggregates and firms Throughout the body we use lowercase letters for aggregate quantities: $e$ for employment, $u$ for unemployment, $v$ for vacancies, $\theta = v/u$ for tightness. The matching function $M(u, v)$ takes these aggregates as inputs. The equation above describes the aggregate flow balance; because the labor force is normalized to one, $e$ doubles as the employment rate and $v$ as the vacancy rate.

The optimization problem of an individual firm is set up at the firm level, with uppercase letters $E$ and $V$ for its own employment and vacancies. With $N_f$ identical firms in equilibrium, $e = N_f \cdot E$ and $v = N_f \cdot V$. Each firm takes aggregate tightness $\theta$ (and hence $q(\theta)$) as given. Appendix A works out the firm's problem explicitly and shows that the per-firm and aggregate flow balances are equivalent.

A reminder on method. The firm's optimization in the next section is solved as a steady-state reduced form, not as a fully intertemporal dynamic program with asset values for filled jobs and vacancies. This delivers the same job creation condition as the dynamic-programming formulation under our assumptions but avoids the Bellman-equation apparatus.

§5The job creation condition

Posting a vacancy costs $c$ per unit of time, but the vacancy is filled only at rate $q(\theta)$, so the expected cost of recruiting one worker is $c/q(\theta)$. Once filled, a job survives until it is destroyed at rate $s$, giving an expected duration of $1/s$. At the optimum the flow surplus from a worker, capitalized over the expected duration of the match, must equal the expected hiring cost.

The optimization problem leads to the job creation condition:

$$\boxed{\;\; A - w \;=\; \frac{s\, c}{q(\theta)}\;\;}$$

A formal derivation is given in Appendix A.

Solving for $w$ gives the job creation curve in $(\theta, w)$ space:

$$w^{JC}(\theta) \;=\; A \;-\; \frac{s\, c}{q(\theta)}.$$

The JC curve slopes downward in $\theta$: a tighter market makes vacancies harder to fill, raising hiring costs and forcing wages down.

Intuition Read the JC condition as: flow surplus per worker = separation rate × expected hiring cost. The presence of $s$ on the right-hand side has a clean interpretation: because filled jobs separate at rate $s$, the firm must repeatedly replace workers over time, so the relevant cost of holding one worker is the per-period flow cost of re-hiring that worker, $s \cdot c/q(\theta)$. If hiring becomes cheaper (low $c$ or high $q(\theta)$), the firm can afford a higher wage. If matches break up quickly (high $s$), the firm needs a larger surplus to make vacancy posting worthwhile.

§6Wage determination

When a worker and the firm meet, the match generates a surplus that did not exist before they met. Wages are determined by Nash bargaining: the worker and the firm split the surplus according to the worker's bargaining power $\beta \in (0,1)$. Workers receive flow value $b$ when unemployed (unemployment benefits plus the value of leisure or home production).

The bargaining outcome is the wage curve:

$$\boxed{\;\; w^{WC}(\theta) \;=\; (1-\beta)\, b \;+\; \beta\,(A + c\,\theta) \;\;}$$

A formal derivation is given in Appendix B.

The wage is a convex combination of the worker's outside option $b$ and the firm's full productive value $A + c\,\theta$. The term $c\,\theta$ captures the fact that, in a tight market, the firm has been saving on hiring costs (it could find a worker quickly) and the worker can credibly demand a share of those savings. The WC curve is therefore upward-sloping.

§7Equilibrium: where WC meets JC

The equilibrium of the model is the unique point at which the wage curve and the job creation curve cross. Setting $w^{WC}(\theta) = w^{JC}(\theta)$:

$$(1 - \beta)\, b + \beta\,(A + c\,\theta) \;=\; A - \frac{s\, c}{q(\theta)}.$$

This pins down equilibrium tightness $\theta^*$. Since the WC curve is upward-sloping and the JC curve is downward-sloping, the solution is unique whenever $A > b$. Once $\theta^*$ is known, the equilibrium wage $w^*$ is read off either curve.

Equilibrium diagram
Figure 1. Equilibrium as the intersection of the wage curve (blue, upward-sloping) and the job creation curve (red, downward-sloping) at the benchmark calibration $A=1.00$, $b=0.41$, $\beta=0.879$, $c=0.12$, $s=0.035$, $\phi=0.754$, $\alpha=0.5$.
Key result The equilibrium is the point where two opposing forces balance. Firms find it harder to fill vacancies as $\theta$ rises, which limits how high wages can go (the JC curve falls). Workers can demand higher wages as $\theta$ rises, because the firm has been saving on hiring costs (the WC curve rises). Equilibrium $\theta^*$ is the unique tightness consistent with both forces.

§8Steady-state unemployment and the Beveridge curve

Unemployment evolves according to $\dot u = s\, e - p(\theta)\, u$, where $e = 1 - u$. The first term captures inflows into unemployment (the separation rate times the stock of employed workers); the second captures outflows (the job-finding rate times the stock of unemployed workers). Setting $\dot u = 0$ gives the steady-state unemployment rate

$$\boxed{\;\; u^* \;=\; \frac{s}{s + p(\theta^*)} \;\;}$$

Vacancies are then $v^* = \theta^*\, u^*$.

Beveridge curve
Figure 2. The Beveridge curve. Each point is a steady-state $(u, v)$ pair for a given $\theta$. The dashed green line is the ray $v = \theta^* u$: every $(u, v)$ pair on that ray has the same tightness.
The Beveridge curve in real data The model's predicted downward-sloping convex Beveridge curve is one of the most robust empirical regularities in modern macro. The U.S. Bureau of Labor Statistics maintains a live, monthly-updated chart of the U.S. Beveridge curve at bls.gov. Hovering over the chart shows the recession periods (the curve shifts out and the economy moves up the curve as the labor market tightens during recoveries) and the post-2009 outward shift that motivated a large empirical literature on changes in matching efficiency $\phi$. Compare the qualitative shape of Figure 2 to what the BLS shows in real time.

At the benchmark calibration, the equilibrium is approximately $\theta^* \approx 0.635$, $w^* \approx 0.996$, $u^* \approx 5.5\%$, $v^* \approx 3.5\%$.

§9Comparative statics

The clearest way to understand the model is to see how the equilibrium moves when a parameter changes. Two leading examples:

A productivity shock

Suppose productivity rises from $A = 1.00$ to $A = 1.15$. Both the WC and JC curves shift upward. Equilibrium tightness rises and the equilibrium wage rises; unemployment falls.

Productivity shock
Figure 3. Effect of a productivity shock. Both WC and JC shift up; the new equilibrium (green) features higher tightness, a higher wage, and lower unemployment.

Higher unemployment benefits

Suppose unemployment benefits rise from $b = 0.41$ to $b = 0.65$. This shifts the wage curve upward but leaves the job creation curve unchanged. The new intersection lies up and to the left: tightness falls, the wage rises, and unemployment goes up.

Unemployment benefits shock
Figure 4. Effect of higher unemployment benefits. Only WC shifts up; JC is unchanged.
Shock$\theta^*$$w^*$$u^*$
Higher productivity $A$
Higher vacancy cost $c$amb.
Higher separation rate $s$
Higher unemployment benefit $b$
Higher matching efficiency $\phi$
Higher bargaining power $\beta$

§10Live simulator

Push the sliders below to set counterfactual parameter values. The model is re-solved in real time, in your browser, by JavaScript that mirrors the same equations as the companion Python notebook. Solid lines correspond to the benchmark calibration; dashed lines correspond to the counterfactual. The black dot is the benchmark equilibrium, the red dot is the counterfactual.

Search-and-matching simulator
Loading Python runtime…
s 0.035
c 0.120
A 1.000
b 0.410
β 0.879
φ 0.754
α 0.500
Labor-market equilibrium (θ, w)
Beveridge curve (u, v)

Benchmark

θ=
w=
p=
q=
u=
v=

Counterfactual

θ=
w=
p=
q=
u=
v=

Suggested labs

Lab 1 — Productivity shocks Starting from the benchmark, raise $A$ from $1.00$ to $1.20$ in steps of $0.05$. Verify that you reproduce the qualitative pattern of Figure 3. Track $\theta^*$, $w^*$, and $u^*$. Where does the equilibrium travel along the Beveridge curve?
Lab 2 — Unemployment insurance Raise $b$ from $0.41$ to $0.70$ in steps of $0.05$. Compare your screen with Figure 4. Document the effect on $w^*$, $\theta^*$, and $u^*$. Are your findings consistent with the “moral hazard” view of unemployment insurance?
Lab 3 — Matching efficiency Reset to benchmark and lower $\phi$ from $0.754$ to $0.50$. The Beveridge curve shifts outward. Why? Can you reproduce a stylised “Beveridge curve outward shift” similar to the one observed in the U.S.\ after 2009?
Lab 4 — Bargaining power Vary $\beta$ between $0.30$ and $0.95$. At which $\beta$ does the wage approach $A$? Why is this limit economically sensible?

§11Policy applications

Exercise Suppose a government wants to reduce equilibrium unemployment by 1 percentage point. Compare two policies in the simulator above: (i) raising $\phi$ from $0.754$ to a higher value, and (ii) reducing $b$. Which policy delivers the largest reduction in $u^*$ for a given change in wages? What does each policy “cost” the worker?

§12Connections to the literature

Further reading
  • The framework. Mortensen and Pissarides (1994) introduce the modern search-and-matching model with endogenous job destruction; they share the 2010 Nobel Prize with Peter Diamond. Pissarides (2000) is the canonical textbook treatment.
  • Calibration. Shimer (2005) provides the calibration strategy followed in Appendix C: target steady-state unemployment and vacancy rates.
  • Vacancy posting costs. Silva and Toledo (2009) estimate that hiring costs represent about 4% of quarterly wages, the basis for the benchmark $c = 0.12$.
  • Wage rigidity. Shimer (2005) shows that, under Nash bargaining, the model generates too little volatility in unemployment and vacancies relative to the data. Hall (2005) responds by replacing flexible Nash bargaining with sticky wages.

§13What this model leaves out

The framework presented here is deliberately simplified for teaching. Students should be aware of the main features it abstracts from, both to avoid drawing over-strong conclusions from the simulator and to see where the modern research frontier lies. The most important omissions are:

These extensions are active research areas. A natural next step for students who finish this page is to choose one of them and explore how it modifies the simple WC–JC equilibrium developed here.

§AAppendix A: Deriving the job creation condition

This appendix derives the JC condition from the firm's profit-maximization problem in steady state. We make the firm/aggregate distinction explicit: uppercase letters $E$ and $V$ denote the firm's own employment and vacancies, while lowercase letters $e, u, v$ denote aggregates (as in the body). With $N_f$ identical firms in equilibrium,

$$e = N_f \cdot E,\quad v = N_f \cdot V,\quad u = 1 - e,\quad \theta = v/u.$$

Each firm takes the aggregate tightness $\theta$ (and hence $p(\theta)$ and $q(\theta)$) as given.

The firm

A representative firm produces $Y = A\, E$, where $A$ is productivity per worker and $E$ is the firm's employment. A fraction $s$ of employed workers separate at each instant, so the firm posts $V$ vacancies at flow cost $c$ each to replace them. Flow profits are $\Pi = A\, E - w\, E - c\, V$.

Steady-state flows

At the firm level, inflows equal outflows in steady state:

$$q(\theta)\, V \;=\; s\, E.$$

Aggregating across the $N_f$ identical firms (multiplying both sides by $N_f$) recovers the aggregate flow balance $q(\theta)\, v = s\, e$, equivalent to $p(\theta)\, u = s\, e$ by the definition of tightness, since $q(\theta)\, v = q(\theta)\, u\, \theta = p(\theta)\, u$. This is the body's $\dot e = q(\theta)v - se$ at $\dot e = 0$.

Solving the firm-level balance for $V$:

$$V \;=\; \frac{s\, E}{q(\theta)}.$$

Profit maximization

Substituting into profits, the firm's problem reduces to a one-variable maximization in $E$:

$$\max_{E}\;\; \Pi \;=\; A\, E \;-\; w\, E \;-\; c\,\frac{s\, E}{q(\theta)}.$$

The first-order condition with respect to $E$ delivers the JC condition: $A = w + sc/q(\theta)$, or equivalently $A - w = sc/q(\theta)$, exactly as in the body.

§BAppendix B: Deriving the wage equation

A note on the surplus formulation The expression $A - w + c\,\theta$ should be read as a reduced-form representation of the firm's surplus, designed for undergraduate exposition. The term $c\,\theta$ captures the recruiting-cost savings the firm enjoys by retaining the current match; it is not literally the firm's continuation value in a fully dynamic Bellman formulation. The fully dynamic asset-value derivation (see, e.g., Pissarides 2000) yields the same wage equation in steady state under our assumptions, but is more notationally demanding. We adopt the reduced-form version here because it preserves the economic content while remaining accessible.

The Nash bargain over the joint match surplus is:

$$\max_{w}\;\; (w - b)^{\beta}\,\bigl[\,A - w + c\,\theta\,\bigr]^{1-\beta}.$$

Take logs and differentiate

Equivalently, maximize $\beta \ln(w-b) + (1-\beta)\ln(A - w + c\theta)$. Differentiating with respect to $w$ and setting to zero:

$$\frac{\beta}{w-b} \;=\; \frac{1-\beta}{A - w + c\,\theta} \quad\Longleftrightarrow\quad \beta(A - w + c\,\theta) \;=\; (1-\beta)(w-b).$$

Solving for the wage

Solving for $w$ delivers the wage curve:

$$w \;=\; (1-\beta)\, b \;+\; \beta\,(A + c\,\theta).$$

Setting $\beta = 0$ gives $w = b$: with no bargaining power, the worker receives only the outside option. Setting $\beta = 1$ gives $w = A + c\,\theta$: the worker captures the entire productive value, including the recruiting cost the firm has saved by filling the vacancy.

§CAppendix C: Calibration

The model is calibrated to U.S. data averaged over 2002–2025, following the spirit of Shimer (2005)—targeting steady-state labor-market outcomes. We fix $\alpha = 0.5$ and treat the following as externally given:

The remaining unknowns—$\phi$, $\beta$, $p(\theta^*)$, $q(\theta^*)$, and $w^*$—must satisfy the five steady-state equilibrium conditions: the unemployment relation, the JC condition, the matching rates, and the wage curve. Five equations, five unknowns. Solving numerically (Excel Solver, or the Python code that powers the simulator above) gives:

$$\phi = 0.754,\quad \beta = 0.879,\quad p(\theta^*) = 0.601,\quad q(\theta^*) = 0.946,\quad w^* = 0.996.$$
On the magnitude of $\beta$ The calibrated value $\beta \approx 0.88$ should not be interpreted literally as “workers capture 88% of the surplus” in the empirical sense. It is the value required for the simple model to match the steady-state targets simultaneously, and it partly compensates for features the benchmark abstracts from (no on-the-job search, no endogenous separations, no wage rigidity). Shimer (2005) and the subsequent literature have emphasized that calibrating $\beta$ to match steady-state moments tends to produce values much higher than direct empirical estimates of bargaining power. For counterfactual exercises in the simulator, treat $\beta$ as a model parameter rather than an empirical quantity.

The benchmark equilibrium delivers $\theta^* \approx 0.635$, $u^* \approx 0.055$, $v^* \approx 0.035$, against the data targets $\theta_\text{data} = 0.636$, $u_\text{data} = 0.05$, $v_\text{data} = 0.035$. The small discrepancies reflect the simplicity of the model.

§DAppendix D: The companion notebook

The simulator on this page runs the same Python code as the companion Colab notebook. The five core functions are:

Notebook interface mockup
Figure 5. The Colab interface mirrored on this page. Sliders set the seven model parameters; the equilibrium plot and Beveridge curve update in real time.

If you want to run the model in a Python environment of your own, download the notebook or the plain script.