diff --git a/app/backend/database.py b/app/backend/database.py
index d394b3c74e3b02c20656f0708626169bb9e33ec8..340a31feb280d4c31374a3f97629d4ac2dc4bac6 100644
--- a/app/backend/database.py
+++ b/app/backend/database.py
@@ -1,11 +1,14 @@
 from sqlmodel import SQLModel, Session, create_engine
 from app.core.config import settings
+from backend.dummy_data import insert_dummy_data
 
 engine = create_engine(settings.database_url, echo=settings.debug)
 
 
 def init_db():
     SQLModel.metadata.create_all(engine, checkfirst=True)
+    with Session(engine) as session:
+        insert_dummy_data(session)
 
 
 def get_session():
diff --git a/app/backend/dummy_data.py b/app/backend/dummy_data.py
new file mode 100644
index 0000000000000000000000000000000000000000..e2550dfc5253d893607822247aa3681f1a514bf9
--- /dev/null
+++ b/app/backend/dummy_data.py
@@ -0,0 +1,90 @@
+from sqlmodel import Session
+from backend.models.models import (
+    User,
+    Shop,
+    Category,
+    Product,
+    ProductImage,
+    Order,
+    OrderItem,
+)
+from backend.utils.hashing import hash_password
+
+
+def insert_dummy_data(session: Session):
+    if not session.query(User).first():
+        users = [
+            User(
+                username="string",
+                email="user@example.com",
+                password=hash_password("string"),
+                role="customer",
+            ),
+            User(
+                username="shop_owner",
+                email="owner@example.com",
+                password=hash_password("string"),
+                role="shop_owner",
+            ),
+        ]
+        session.add_all(users)
+        session.commit()
+
+    if not session.query(Shop).first():
+        shops = [
+            Shop(
+                owner_id=2,
+                name=f"Shop{i}",
+                description=f"Description for Shop {i}",
+                image_url="app/static/default/default_shop.png",
+            )
+            for i in range(1, 6)
+        ]
+        session.add_all(shops)
+        session.commit()
+
+    if not session.query(Category).first():
+        categories = [Category(name=f"Category{i}") for i in range(1, 6)]
+        session.add_all(categories)
+        session.commit()
+
+    if not session.query(Product).first():
+        products = [
+            Product(
+                shop_id=i,
+                category_id=i,
+                name=f"Product{i}",
+                description=f"Description for Product {i}",
+                price=99.99 + i,
+                stock=10 * i,
+            )
+            for i in range(1, 6)
+        ]
+        session.add_all(products)
+        session.commit()
+
+    if not session.query(ProductImage).first():
+        images = [
+            ProductImage(
+                product_id=i, image_url="app/static/default/default_product.png"
+            )
+            for i in range(1, 6)
+        ]
+        session.add_all(images)
+        session.commit()
+
+    if not session.query(Order).first():
+        orders = [
+            Order(user_id=1, shop_id=i, total_price=100 + (i * 50), status="pending")
+            for i in range(1, 6)
+        ]
+        session.add_all(orders)
+        session.commit()
+
+    if not session.query(OrderItem).first():
+        order_items = [
+            OrderItem(order_id=i, product_id=i, quantity=i, price=99.99 + i)
+            for i in range(1, 6)
+        ]
+        session.add_all(order_items)
+        session.commit()
diff --git a/app/backend/main.py b/app/backend/main.py
index f903ab4ffff2e2da8315caf0b43cdd4cb80f770e..fc140a3e41980616925b92974b0e529b05509921 100644
--- a/app/backend/main.py
+++ b/app/backend/main.py
@@ -4,7 +4,7 @@ import os
 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 
 from fastapi import FastAPI
-from backend.routes import auth, shop, product, category
+from backend.routes import auth, shop, product, category, search
 from backend.database import init_db
 from core.config import settings
 
@@ -14,13 +14,13 @@ app = FastAPI(title="Shopping App", version="1.0.0", debug=settings.debug)
 init_db()
 
 # Include API routes
+app.include_router(search.router, prefix="/search", tags=["search"])
 app.include_router(auth.router, prefix="/auth", tags=["auth"])
 app.include_router(shop.router, prefix="/shops", tags=["shops"])
 app.include_router(product.router, prefix="/product", tags=["product"])
 app.include_router(category.router, prefix="/category", tags=["category"])
 
 
-
 @app.get("/")
 async def root():
     return {"message": "Welcome to the shopping app api"}
diff --git a/app/backend/routes/search.py b/app/backend/routes/search.py
new file mode 100644
index 0000000000000000000000000000000000000000..20ff7f954df064a8e419b69f5fac421ff05a0e3f
--- /dev/null
+++ b/app/backend/routes/search.py
@@ -0,0 +1,37 @@
+from fastapi import APIRouter, Depends, Query
+from sqlalchemy.orm import Session
+from sqlalchemy.orm import joinedload
+from backend.database import get_session
+from backend.models.models import Shop, Product, Category
+from typing import List, Union
+
+router = APIRouter()
+
+
+@router.get("/search", response_model=List[Union[Shop, Product]])
+def search(
+    name: str = Query(None, description="Name to search"),
+    category: str = Query(None, description="Category to filter by (for products)"),
+    search_type: str = Query(
+        "both", description="Search type: 'shops', 'products', or 'both'"
+    ),
+    db: Session = Depends(get_session),
+):
+    results = []
+    if search_type in ["shops", "both"]:
+        shop_query = db.query(Shop)
+        if name:
+            shop_query = shop_query.filter(Shop.name.ilike(f"%{name}%"))
+        results.extend(shop_query.all())
+
+    if search_type in ["products", "both"]:
+        product_query = db.query(Product).options(joinedload(Product.category))
+        if name:
+            product_query = product_query.filter(Product.name.ilike(f"%{name}%"))
+        if category:
+            product_query = product_query.join(Category).filter(
+                Category.name.ilike(f"%{category}%")
+            )
+        results.extend(product_query.all())
+
+    return results