diff --git a/ksql.go b/ksql.go
index 0aae7df..bd84c56 100644
--- a/ksql.go
+++ b/ksql.go
@@ -432,6 +432,10 @@ func (c DB) Insert(
 		)
 	}
 
+	if v.IsNil() {
+		return fmt.Errorf("ksql: expected a valid pointer to struct as argument but received a nil pointer: %v", record)
+	}
+
 	info := kstructs.GetTagInfo(t.Elem())
 
 	query, params, scanValues, err := buildInsertQuery(c.dialect, table.name, t, v, info, record, table.idColumns...)
diff --git a/ksql_test.go b/ksql_test.go
index 257b8c6..26f8e05 100644
--- a/ksql_test.go
+++ b/ksql_test.go
@@ -791,6 +791,18 @@ func TestInsert(t *testing.T) {
 					assert.NotEqual(t, nil, err)
 				})
 
+				t.Run("should report error if it receives a nil pointer to a struct", func(t *testing.T) {
+					db, closer := connectDB(t, config)
+					defer closer.Close()
+
+					ctx := context.Background()
+					c := newTestDB(db, config.driver)
+
+					var user *User
+					err := c.Insert(ctx, UsersTable, user)
+					assert.NotEqual(t, nil, err)
+				})
+
 				t.Run("should not panic if a column doesn't exist in the database", func(t *testing.T) {
 					db, closer := connectDB(t, config)
 					defer closer.Close()